Heim >Backend-Entwicklung >Golang >Wie kann ich benutzerdefinierte Schlüsselgleichheit für Go Maps implementieren?
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:
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!