ホームページ  >  記事  >  バックエンド開発  >  Golang 配列の交差部分を復号化するためのヒント

Golang 配列の交差部分を復号化するためのヒント

王林
王林オリジナル
2024-04-03 17:39:011205ブラウズ

Go 言語では、配列の共通部分を見つける方法は次のとおりです。ソートされた配列に適した組み込み関数 Intersect を使用します。大きな配列または要素が少ない配列に適したマップを使用します。非常に大きな配列のカスタム並べ替えと二分検索。どの方法を選択するかは、配列のサイズと要素の分布によって異なります。

解密 Golang 数组求交集的技巧

Go 言語の配列の共通部分を見つけるテクニックを解読する

Go 言語では、配列は順序付けられたコレクションです。同じ型の要素を格納します。配列に対して交差演算を実行すると、2 つ以上の配列に同時に存在する要素を取得できます。以下では、さまざまなシナリオで交差点を見つけるためのいくつかの実用的なテクニックを紹介します。

組み込み関数Intersect

Go 言語は、sortIntersect 関数を提供します。パッケージでは、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。