Go 言語では、配列の共通部分を見つける方法は次のとおりです。ソートされた配列に適した組み込み関数 Intersect を使用します。大きな配列または要素が少ない配列に適したマップを使用します。非常に大きな配列のカスタム並べ替えと二分検索。どの方法を選択するかは、配列のサイズと要素の分布によって異なります。
Go 言語の配列の共通部分を見つけるテクニックを解読する
Go 言語では、配列は順序付けられたコレクションです。同じ型の要素を格納します。配列に対して交差演算を実行すると、2 つ以上の配列に同時に存在する要素を取得できます。以下では、さまざまなシナリオで交差点を見つけるためのいくつかの実用的なテクニックを紹介します。
組み込み関数Intersect
Go 言語は、sort
で Intersect
関数を提供します。パッケージでは、2 つのソートされた配列の共通部分を直接見つけることができます。この関数は、ソートされた 2 つの配列を引数として受け取り、交差要素を含む新しい配列を返します。
package main import ( "fmt" "sort" ) func main() { arr1 := []int{1, 3, 5, 7, 9} arr2 := []int{2, 4, 6, 8, 9} sort.Ints(arr1) sort.Ints(arr2) res := sort.Intersect(arr1, arr2) fmt.Println(res) // []9 }
小さな配列の場合、Intersect
関数は効率的で簡潔なソリューションです。
使用 map
大規模な配列または要素が少ない配列の場合は、map
を使用して検索することも効果的です。交差点。メソッド。配列を map
のキーとして使用すると、別の配列の要素が map
にも含まれているかどうかをすばやく確認できます。
package main import "fmt" func main() { arr1 := []int{1, 3, 5, 7, 9} arr2 := []int{2, 4, 6, 8, 9} m := make(map[int]bool) for _, v := range arr1 { m[v] = true } var res []int for _, v := range arr2 { if m[v] { res = append(res, v) } } fmt.Println(res) // []9 }
カスタムの並べ替えと二分検索
非常に大きな配列の場合、交差部分にカスタムの並べ替えと二分検索のアルゴリズムを使用すると、パフォーマンスが向上します。まず両方の配列を並べ替えてから、一方の配列を反復処理し、もう一方の配列で二分検索を実行して一致する要素を見つけます。
package main import ( "fmt" "sort" ) func main() { arr1 := []int{1, 3, 5, 7, 9, 11, 13, 15} arr2 := []int{2, 4, 6, 8, 9, 10, 12, 14, 16} sort.Ints(arr1) sort.Ints(arr2) res := intersection(arr1, arr2) fmt.Println(res) // []9 } func intersection(a, b []int) []int { var res []int for _, v := range a { idx := sort.SearchInts(b, v) if idx >= 0 && b[idx] == v { res = append(res, v) } } return res }
配列のサイズと要素の分布に基づいて、最も適切な交差手法を選択すると、コードのパフォーマンスを最適化できます。
以上がGolang 配列の交差部分を復号化するためのヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。