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 サイトの他の関連記事を参照してください。