Heim >Backend-Entwicklung >Golang >Wie kann ich benutzerdefinierte Gleichheit für Kartenschlüssel in Go implementieren?
Benutzerdefinierte Kartenschlüssel mit benutzerdefinierter Gleichheit in Go
In Go verwenden Karten eine strikte vergleichbare Semantik für Kartenschlüssel. Dies bedeutet, dass Programmierer ihre eigenen Hash-Funktionen und Gleichheitsoperationen für Kartenschlüssel nicht wie in anderen Sprachen implementieren können.
Um diese Einschränkung zu beheben, sollten Sie einen alternativen Ansatz in Betracht ziehen. Anstatt Strukturinstanzen direkt als Schlüssel zu verwenden, verwenden Sie ein abgeleitetes Attribut der Struktur, das als geeigneter Zuordnungsschlüssel dient und der gewünschten Gleichheitssemantik entspricht. In vielen Fällen ist es möglich, einen Ganzzahl- oder Zeichenfolgenwert als Hash-Code abzuleiten, der die Identität einer Instanz darstellt.
Es ist wichtig sicherzustellen, dass Kollisionen im abgeleiteten Hash-Code nur dann auftreten, wenn sie auf eine echte semantische Identität hinweisen der gespeicherte Wert. Dies bedeutet, dass entsprechende Werte austauschbar sein sollten.
Zum Beispiel:
type Key struct { a *int } func (k *Key) HashKey() int { return *(*k).a } k1, k2 := Key{intPtr(1)}, Key{intPtr(2)} m := map[int]string{} m[k1.HashKey()] = "one" m[k2.HashKey()] = "two" // m = map[int]string{1:"one", 2:"two"} m[k1.HashKey()] // => "one"
Beachten Sie jedoch Bedenken hinsichtlich der Unveränderlichkeit, wenn Sie diesen Ansatz verwenden. Wenn Sie das a-Feld im obigen Beispiel ändern, kann die Instanz nicht mehr als Hash-Schlüssel dienen, da sich ihre Identität geändert hat.
Das obige ist der detaillierte Inhalt vonWie kann ich benutzerdefinierte Gleichheit für Kartenschlüssel in Go implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!