Go スライスでの要素の検索
Go で構造体のスライスを操作する場合、キーによって特定の要素を検索するのが一般的なタスクになることがあります。さまざまなアプローチを使用してこれを実現する方法を調べてみましょう。
汎用関数:slices.IndexFunc()
Go 1.21 では、標準ライブラリのスライス パッケージに汎用検索関数slices.IndexFunc():
func IndexFunc[S ~[]E, E any](s S, f func(E) bool) int
この関数f(s[i]) が true の場合、最初のインデックス i を返します。一致する要素が見つからない場合は -1 を返します。 Slices.IndexFunc() を使用して構造体のスライス内のキーを検索するには:
idx := slices.IndexFunc(myconfig, func(c Config) bool { return c.Key == "key1" })
For Loop
Go の以前のバージョンまたは基本的なバージョンを使用する場合このアプローチでは、for ループを使用できます:
for _, v := range myconfig { if v.Key == "key1" { // Found } }
Optimized Forループ
パフォーマンスを向上させるには、要素をコピーする代わりに、インデックス i を操作する for ループを使用することをお勧めします。
for i := range myconfig { if myconfig[i].Key == "key1" { // Found } }
効率的な検索のためのマップ
キーによる要素の検索が頻繁に行われる操作の場合は、スライスからマップを構築することを検討してください。これにより、キーベースの高速検索が可能になります。
// Build a config map: confMap := map[string]string{} for _, v := range myconfig { confMap[v.Key] = v.Value } // To find a value by key: if v, ok := confMap["key1"]; ok { // Found }
考慮事項:
以上がGo スライス内の要素をキーによって効率的に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。