スライス内の要素の検索には、反復ループが含まれることがよくあります。ただし、このプロセスを最適化する代替方法があります。
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 サイトの他の関連記事を参照してください。