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"
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!