Heim >Backend-Entwicklung >Golang >Wie kann ich einen benutzerdefinierten Schlüsselvergleich in Go Maps implementieren?

Wie kann ich einen benutzerdefinierten Schlüsselvergleich in Go Maps implementieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-16 06:11:16694Durchsuche

How Can I Implement Custom Key Comparison in Go Maps?

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!

Stellungnahme:
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