Maison >développement back-end >Golang >Comment puis-je implémenter une comparaison de clés personnalisée dans Go Maps ?

Comment puis-je implémenter une comparaison de clés personnalisée dans Go Maps ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-16 06:11:16694parcourir

How Can I Implement Custom Key Comparison in Go Maps?

Comparaison de clés personnalisées dans Go Maps

Dans Go, les cartes nécessitent des clés comparables, mais parfois une opération d'égalité personnalisée est souhaitée. Ce scénario se produit lorsqu'une structure de données personnalisée, telle qu'une structure définie par l'utilisateur, est utilisée comme clé de carte.

Pour contourner cette limitation, une solution de contournement consiste à dériver un attribut distinct de la structure qui sert de carte. clé. Cet attribut dérivé doit avoir la sémantique d'égalité souhaitée et doit être intrinsèquement utilisable comme clé.

Considérons l'exemple suivant :

type Key struct {
    a *int
}

func (k *Key) HashKey() int {
    return *k.a
}

Dans cet exemple, la méthode HashKey dérive une valeur entière qui représente l’identité de la Clé. La carte peut ensuite être construite à l'aide de cet attribut dérivé :

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]

Notez que la comparaison clé repose uniquement sur la méthode HashKey(), permettant une sémantique d'égalité personnalisée.

Immuabilité Considérations

Cependant, l'immuabilité est cruciale lors de l'utilisation de cette approche. Si les champs de la structure d'origine sont modifiés, l'instance ne peut plus être utilisée comme clé de mappage car son identité a changé.

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!

Déclaration:
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