Heim  >  Artikel  >  Backend-Entwicklung  >  Tipps zum Entschlüsseln der Golang-Array-Schnittmenge

Tipps zum Entschlüsseln der Golang-Array-Schnittmenge

王林
王林Original
2024-04-03 17:39:011206Durchsuche

In der Go-Sprache gibt es folgende Methoden zum Ermitteln der Schnittmenge von Arrays: Verwenden Sie die integrierte Funktion „Intersect“, die für sortierte Arrays geeignet ist. Verwenden Sie eine Karte, die für große Arrays oder Arrays mit wenigen Elementen geeignet ist. Benutzerdefinierte Sortierung und binäre Suche für sehr große Arrays. Welche Methode zu wählen ist, hängt von der Größe des Arrays und der Verteilung der Elemente ab.

解密 Golang 数组求交集的技巧

Entschlüsseln Sie die Fähigkeiten zum Finden der Schnittmenge von Arrays in der Go-Sprache.

In der Go-Sprache ist ein Array eine geordnete Sammlung, die Elemente desselben Typs speichert. Durch die Durchführung einer Schnittoperation für Arrays können Elemente erhalten werden, die gleichzeitig in zwei oder mehr Arrays vorhanden sind. Im Folgenden werden mehrere praktische Techniken zum Auffinden von Kreuzungen in verschiedenen Szenarien vorgestellt.

Eingebaute Funktion IntersectIntersect

Go 语言提供了 sort 包中的 Intersect 函数,可直接求取两个已排序数组的交集。该函数接收两个已排序数组作为参数,并返回一个包含交集元素的新数组。

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

Die Go-Sprache stellt die Funktion Intersect im Paket sort bereit, mit der zwei sortierte Arrays direkt abgerufen werden können Überschneidung. Diese Funktion empfängt zwei sortierte Arrays als Argumente und gibt ein neues Array zurück, das die Schnittelemente enthält.

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
}
Für kleinere Arrays ist die Funktion Intersect eine effiziente und übersichtliche Lösung.

Verwenden Sie map

🎜Für große Arrays oder Arrays mit wenigen Elementen ist die Verwendung von map für Schnittmengen ebenfalls eine effektive Methode. Durch die Verwendung eines Arrays als Schlüssel in einer map können Sie schnell überprüfen, ob ein Element in einem anderen Array auch in einer map vorhanden ist. 🎜
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
}
🎜🎜Benutzerdefinierte Sortierung und binäre Suche🎜🎜🎜Bei sehr großen Arrays kann die Verwendung benutzerdefinierter Sortier- und binärer Suchalgorithmen für Schnittmengen eine bessere Leistung erzielen. Sortieren Sie zunächst beide Arrays, durchlaufen Sie dann eines der Arrays und führen Sie eine binäre Suche im anderen durch, um passende Elemente zu finden. 🎜rrreee🎜Wählen Sie die am besten geeignete Schnitttechnik basierend auf Array-Größe und Elementverteilung, um die Codeleistung zu optimieren. 🎜

Das obige ist der detaillierte Inhalt vonTipps zum Entschlüsseln der Golang-Array-Schnittmenge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn