ホームページ > バックエンド開発 > Golang > Go スライス内の要素の存在を効率的に確認するにはどうすればよいですか?

Go スライス内の要素の存在を効率的に確認するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-11 04:54:08
オリジナル
297 人が閲覧しました

How to Efficiently Check for Element Existence in Go Slices?

Go スライス: Missing Contains メソッド

Go では、スライスは、指定された要素が内部に存在するかどうかを効率的にチェックするメソッドをネイティブに提供しません。彼ら。各要素を繰り返して手動で検索する必要がある場合、これは面倒な操作になる可能性があります。

代替アプローチ

カスタムの contains メソッドを実装することは可能ですが、実装はできません。普遍的に推奨されています。代わりに、次の代替案を検討してください:

  • ソート パッケージの使用: ソート パッケージは、ソートされたスライスに対して効率的な包含チェックを実行するために活用できるバイナリ検索機能を提供します。
  • マップの利用: 頻繁に包含チェックを行うシナリオには、マップの方が適している可能性があります。マップは、特定のキーの存在を確認するためのイディオム値 ok := yourmap[key] をネイティブにサポートしています。さらに最適化するには、map[string]struct{} を作成して値のストレージのオーバーヘッドを排除します。空の構造体は Go のマップ実装内で最適化され、セットに適した選択肢になります。

例:

words という名前の文字列のスライスを考えてみましょう:

words := []string{"apple", "banana", "cherry"}
ログイン後にコピー

sort を使用して「cherry」の存在を確認するにはパッケージ:

i := sort.SearchStrings(words, "cherry")
if i < len(words) && words[i] == "cherry" {
  fmt.Println("cherry found")
}
ログイン後にコピー

マップを使用してチェックするには:

existsMap := map[string]struct{}{}
for _, word := range words {
  existsMap[word] = struct{}{}
}

if _, ok := existsMap["cherry"]; ok {
  fmt.Println("cherry found")
}
ログイン後にコピー

これらのアプローチは、専用のスライス.contains メソッドを必要とせずに、Go スライスで包含チェックを実行するための効率的かつ柔軟なメカニズムを提供します。 .

以上がGo スライス内の要素の存在を効率的に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート