Heim >Backend-Entwicklung >Golang >Wie kann ich benutzerdefinierte Schlüsselgleichheit für Go Maps implementieren?

Wie kann ich benutzerdefinierte Schlüsselgleichheit für Go Maps implementieren?

Barbara Streisand
Barbara StreisandOriginal
2025-01-02 21:31:39917Durchsuche

How Can I Implement Custom Key Equality for Go Maps?

Benutzerdefinierte Schlüsselgleichheit für Go-Karten

Beim Erstellen einer Karte in Go können Sie jeden Typ als Schlüssel verwenden, solange er implementiert ist die vergleichbare Schnittstelle. Standardmäßig verwendet Go den integrierten Gleichheitsoperator (==) zum Vergleichen von Schlüsseln. Es kann jedoch Fälle geben, in denen Sie Ihre eigenen Gleichheitskriterien definieren möchten.

Beispiel

Betrachten Sie den folgenden benutzerdefinierten Schlüsseltyp:

type Key struct {
    a *int
}

Um zwei Instanzen von Key zu vergleichen, möchten Sie Ihr eigenes Equal verwenden Funktion:

func Equal(x Key, y Key) bool {
    return *x.a == *y.a
}

Problemumgehung

Leider erlaubt Ihnen Go nicht, benutzerdefinierte Hashing- oder Gleichheitsfunktionen für Kartenschlüssel anzugeben. Stattdessen können Sie die folgende Problemumgehung verwenden:

  1. Leiten Sie ein Schlüsselattribut ab:Anstatt die Schlüsselstruktur direkt als Schlüssel zu verwenden, leiten Sie ein Attribut ab (z. B. eine Ganzzahl oder eine Zeichenfolge). das dient als Identität für den Schlüssel. Stellen Sie sicher, dass Kollisionen nur für semantisch identische Schlüssel auftreten.
  2. Hash-Funktion implementieren: Erstellen Sie eine Methode für Key, die das abgeleitete Attribut berechnet und es als Ganzzahl zurückgibt (für Hashing).
func (k *Key) HashKey() int {
    return *(*k).a
}

Beispielverwendung

Verwendung des Im obigen Beispiel wäre die Karte:

k1, k2 := Key{intPtr(1)}, Key{intPtr(2)}
m := map[int]string{}
m[k1.HashKey()] = "one"
m[k2.HashKey()] = "two"

Vorsichtsmaßnahmen

Bedenken Sie, dass dieser Ansatz auf der Unveränderlichkeit des abgeleiteten Schlüsselattributs beruht. Wenn sich Felder in der Schlüsselstruktur ändern, ändert sich die Identität des Schlüssels und er funktioniert nicht wie erwartet.

Das obige ist der detaillierte Inhalt vonWie kann ich benutzerdefinierte Schlüsselgleichheit für Go Maps implementieren?. 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