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

Go でスライスの包含を効率的に確認するにはどうすればよいですか?

DDD
リリース: 2024-12-22 09:21:00
オリジナル
540 人が閲覧しました

How Can I Efficiently Check for Slice Containment in Go?

Go でのスライスの包含チェック

Go では、各項目を反復処理することなく、要素がスライス内に存在するかどうかを効率的に見つけることができます。 .

些細なことメソッド

Mostafa が述べたように、タスクを簡素化するためにカスタム メソッドを作成できます。

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

二分探索

または、 mkb は、sort パッケージのバイナリ検索を使用することを提案しました。このアプローチには、事前に並べ替えられたスライスが必要であり、大規模なデータセットに対して効率的です。

sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] })
idx := sort.Search(len(slice), func(i int) bool { return slice[i] == target })
contains := idx != len(slice) && slice[idx] == target
ログイン後にコピー

マップの最適化

頻繁な包含チェックが必要な場合は、代わりにマップを使用します。スライスを使用するとパフォーマンスが向上する可能性があります。

type Set map[string]struct{}

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

で空の struct{} 値を使用するmap はメモリのオーバーヘッドを削減し、マップのパフォーマンスを最適化します。 Set は、Go での set のような操作によく使用されます。

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

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