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
Freigeben: 2025-01-02 21:31:39
Original
928 Leute haben es durchsucht

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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"
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage