Go-Maps mit benutzerdefinierten Schlüsseln und benutzerdefinierter Gleichheit
Die Implementierung einer Go-Map mit benutzerdefinierten Schlüsseln erfordert die Einhaltung spezifischer Gleichheitsregeln. Leider können die integrierten Gleichheitsoperationen von Go nicht für Kartenschlüssel angepasst werden. Es gibt jedoch eine wirksame Problemumgehung.
Anstatt die Strukturinstanzen direkt als Schlüssel zu verwenden, sollten Sie erwägen, ein eindeutiges Attribut abzuleiten, das als intrinsischer Schlüssel dienen kann und mit Ihrer gewünschten Gleichheitssemantik übereinstimmt. Sie könnten beispielsweise einen Ganzzahl- oder Zeichenfolgenwert ableiten, der die Identität der Instanz darstellt.
Es ist wichtig sicherzustellen, dass Schlüsselkollisionen nur dann auftreten, wenn die entsprechenden Werte eine echte semantische Identität darstellen. Dadurch wird sichergestellt, dass austauschbare Werte korrekt zugeordnet werden.
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"
Denken Sie daran, dass dieser Ansatz unveränderliche Schlüssel erfordert. Durch das Ändern des Felds im obigen Beispiel wird die Identität des Schlüssels ungültig, sodass er nicht mehr als Hash-Schlüssel geeignet ist.
Das obige ist der detaillierte Inhalt vonWie kann ich benutzerdefinierte Strukturen als Schlüssel in Go Maps verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!