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

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

Barbara Streisand
リリース: 2024-12-21 14:47:16
オリジナル
436 人が閲覧しました

How Can I Efficiently Search for Elements in Go Slices?

スライス内の要素の効率的な検索

スライス内の要素の検索には、反復ループが含まれることがよくあります。ただし、このプロセスを最適化する代替方法があります。

組み込みソリューション

Go には組み込みの slide.contains() メソッドが用意されていませんが、作成するのは比較的簡単です。次のような関数を定義できます。

func Contains[T comparable](s []T, v T) bool {
    for _, item := range s {
        if item == v {
            return true
        }
    }
    return false
}
ログイン後にコピー

二分検索

より大きなスライスの場合は、sort パッケージの二分検索アルゴリズムの使用を検討してください。中央の要素をチェックし、その結果に基づいて再帰的に検索を絞り込み、ソートされたスライスのパフォーマンスが向上します。

func BinaryContains[T comparable](s []T, v T) bool {
    i := sort.Search(len(s), func(i int) bool { return s[i] >= v })
    return i < len(s) && s[i] == v
}
ログイン後にコピー

セットのマップ

スライスの包含チェックを頻繁に実行する場合の場合は、代わりにマップの使用を検討してください。 Go のマップは、効率的なキーと値のルックアップを提供します。値の型として空の struct{} を使用すると、セットとして効果的に機能するマップを作成できます。

type Set[T comparable] map[T]struct{}

func NewSet[T comparable]() *Set[T] {
    return new(Set[T])
}

func (s *Set[T]) Add(v T) {
    (*s)[v] = struct{}{}
}

func (s *Set[T]) Contains(v T) bool {
    _, ok := (*s)[v]
    return ok
}
ログイン後にコピー

マップを活用したりスライス検索を最適化することで、Go で要素の存在を効率的に確認できます。スライス。

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

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