Heim >Backend-Entwicklung >Golang >Wie finde ich eindeutige Elemente in einem Go-Slice oder -Array?

Wie finde ich eindeutige Elemente in einem Go-Slice oder -Array?

Susan Sarandon
Susan SarandonOriginal
2024-11-02 11:02:30422Durchsuche

How to Find Unique Elements in a Go Slice or Array?

Eindeutige Elemente in einem Go-Slice oder -Array finden

Beim Umgang mit Daten in Go kann es notwendig sein, nur die eindeutigen Elemente zu extrahieren aus einem Slice oder Array. Während Python für diesen Zweck praktische Konstrukte wie Mengen bereitstellt, bietet Go von Haus aus keine ähnliche integrierte Funktionalität.

Betrachten Sie den in der Frage bereitgestellten Beispielcode, bei dem die eindeutigen Koordinaten aus einer Liste ermittelt werden sollen enthält Duplikate. Der Code versucht dies zu erreichen, indem er sowohl die ursprüngliche Liste (besucht) als auch die anfänglich leere eindeutige Liste durchläuft und dabei jedes besuchte Element mithilfe von Reflektion mit allen Elementen in eindeutigem Zustand vergleicht.

Codeanalyse und Fehler

Der Code enthält jedoch mehrere Probleme:

  • Die Verwendung von Reflection (reflect.DeepEqual()) für den Elementvergleich ist unnötig und führt zu einer zusätzlichen Komplexitätsebene.
  • Die innere Schleife hängt Elemente blind an, ohne zu berücksichtigen, ob sie bereits eindeutig vorhanden sind, was zu mehreren Hinzufügungen desselben Elements führt.

Verbesserte Lösung

Eine vereinfachte und effizientere Lösung, die der gewünschten Logik folgt, wird unten vorgestellt:

<code class="go">visited := []visit{
    visit{1, 100},
    visit{2, 2},
    visit{1, 100},
    visit{1, 1},
}
var unique []visit

for _, v := range visited {
    skip := false
    for _, u := range unique {
        if v == u {
            skip = true
            break
        }
    }
    if !skip {
        unique = append(unique, v)
    }
}

fmt.Println(unique)</code>

Alternative Lösung mit Karte

Alternativ kann man Gos Karte nutzen[besuch] bool, um eine satzartige Struktur zu erstellen und die eindeutigen Elemente wie folgt zu extrahieren:

<code class="go">visited := []visit{
    visit{1, 100},
    visit{2, 2},
    visit{1, 100},
    visit{1, 1},
}
unique := map[visit]bool{}

for _, v := range visited {
    unique[v] = true
}

fmt.Println(unique)</code>

Die Kartenschlüssel repräsentieren die eindeutigen Elemente. Um einen Abschnitt eindeutiger Besuchswerte zu erhalten, ist ein zusätzlicher Schritt erforderlich:

<code class="go">visited := []visit{
    visit{1, 100},
    visit{2, 2},
    visit{1, 100},
    visit{1, 1},
}
var unique []visit

m := map[visit]bool{}

for _, v := range visited {
    if !m[v] {
        m[v] = true
        unique = append(unique, v)
    }
}

fmt.Println(unique)</code>

Diese Lösungen finden effektiv die eindeutigen Elemente in einem Go-Slice oder -Array, halten sich an die Problemstellung und bieten beim Erstellen effiziente Alternativen. Im Set fehlt die Funktionalität.

Das obige ist der detaillierte Inhalt vonWie finde ich eindeutige Elemente in einem Go-Slice oder -Array?. 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