Heim > Backend-Entwicklung > Golang > Wie kann ich benutzerdefinierte Strukturen als Schlüssel in Go Maps verwenden?

Wie kann ich benutzerdefinierte Strukturen als Schlüssel in Go Maps verwenden?

Mary-Kate Olsen
Freigeben: 2024-12-10 16:30:18
Original
566 Leute haben es durchsucht

How Can I Use User-Defined Structs as Keys in Go Maps?

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"
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage