Heim >Backend-Entwicklung >Golang >Wie kann ich einen benutzerdefinierten Schlüsselvergleich in Go Maps implementieren?
Benutzerdefinierter Schlüsselvergleich in Go Maps
In Go erfordern Karten vergleichbare Schlüssel, aber manchmal ist eine benutzerdefinierte Gleichheitsoperation erwünscht. Dieses Szenario tritt auf, wenn eine benutzerdefinierte Datenstruktur, beispielsweise eine benutzerdefinierte Struktur, als Zuordnungsschlüssel verwendet wird.
Um diese Einschränkung zu umgehen, besteht eine Problemumgehung darin, ein separates Attribut von der Struktur abzuleiten, die als Zuordnung dient Schlüssel. Dieses abgeleitete Attribut sollte die gewünschte Gleichheitssemantik aufweisen und grundsätzlich als Schlüssel verwendbar sein.
Betrachten Sie das folgende Beispiel:
type Key struct { a *int } func (k *Key) HashKey() int { return *k.a }
In diesem Beispiel leitet die HashKey-Methode einen ganzzahligen Wert ab repräsentiert die Identität des Schlüssels. Die Karte kann dann mit diesem abgeleiteten Attribut erstellt werden:
k1, k2 := Key{intPtr(1)}, Key{intPtr(2)} m := map[int]string{} m[k1.HashKey()] = "one" m[k2.HashKey()] = "two" fmt.Println(m) // Outputs: map[1:one 2:two]
Beachten Sie, dass der Schlüsselvergleich ausschließlich auf der HashKey()-Methode basiert, was eine benutzerdefinierte Gleichheitssemantik ermöglicht.
Unveränderlichkeit Überlegungen
Unveränderlichkeit ist jedoch bei der Verwendung dieses Ansatzes von entscheidender Bedeutung. Wenn die Felder der ursprünglichen Struktur geändert werden, kann die Instanz nicht mehr als Kartenschlüssel verwendet werden, da sich ihre Identität geändert hat.
Das obige ist der detaillierte Inhalt vonWie kann ich einen benutzerdefinierten Schlüsselvergleich in Go Maps implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!