Maison > développement back-end > Golang > Comment puis-je utiliser des structures définies par l'utilisateur comme clés dans Go Maps ?

Comment puis-je utiliser des structures définies par l'utilisateur comme clés dans Go Maps ?

Mary-Kate Olsen
Libérer: 2024-12-10 16:30:18
original
566 Les gens l'ont consulté

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

Go Maps avec des clés définies par l'utilisateur et une égalité personnalisée

La mise en œuvre d'une carte Go avec des clés définies par l'utilisateur implique le respect de règles d'égalité spécifiques. Malheureusement, les opérations d'égalité intégrées de Go ne peuvent pas être personnalisées pour les clés de carte. Cependant, une solution de contournement efficace existe.

Au lieu d'utiliser directement les instances de structure comme clés, envisagez de dériver un attribut unique qui peut servir de clé intrinsèque et s'aligner sur la sémantique d'égalité souhaitée. Par exemple, vous pouvez dériver une valeur entière ou une valeur de chaîne représentant l'identité de l'instance.

Il est crucial de garantir que les collisions de clés ne se produisent que lorsque les valeurs correspondantes représentent une véritable identité sémantique. Cela garantit que les valeurs interchangeables sont correctement mappées.

Par exemple :

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"
Copier après la connexion

N'oubliez pas que cette approche nécessite des clés immuables. La modification du champ dans l'exemple ci-dessus invalide l'identité de la clé, la rendant impropre comme clé de hachage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal