Le moyen le plus simple et le plus souple est d'utiliser un fichier struct
comme type de clé, en incluant toutes les données que vous souhaitez voir faire partie de la clé, donc dans votre cas :
type Key struct {
X, Y int
}
Et c'est tout. Je l'utilise :
m := map[Key]int{}
m[Key{2, 2}] = 4
m[Key{2, 3}] = 8
fmt.Println("2^2 = ", m[Key{2, 2}])
fmt.Println("2^3 = ", m[Key{2, 3}])
Sortie (essayez-la sur le Go Playground ) :
2^2 = 4
2^3 = 8
Spec : Types de cartes : Vous pouvez utiliser n'importe quel type comme clé où les opérateurs de comparaison ==
y !=
sont entièrement définies, et les formules ci-dessus Key
Le type struct remplit cette fonction.
Spec : Opérateurs de comparaison : Les valeurs des structures sont comparables si tous leurs champs sont comparables. Deux valeurs de structure sont égales si leurs champs non vierge sont égaux.
Une chose importante : vous ne devez pas utiliser un pointeur comme type de clé (ex. *Key
), car la comparaison des pointeurs ne compare que l'adresse mémoire, et non les valeurs pointées.
Notez également que vous pouvez aussi utiliser tableaux (pas tranches ) comme type de clé, mais les tableaux ne sont pas aussi flexibles que les structs. Vous pouvez en savoir plus à ce sujet ici : Pourquoi avoir des tableaux en Go ?
Voici à quoi cela ressemblerait avec des tableaux :
type Key [2]int
m := map[Key]int{}
m[Key{2, 2}] = 4
m[Key{2, 3}] = 8
fmt.Println("2^2 = ", m[Key{2, 2}])
fmt.Println("2^3 = ", m[Key{2, 3}])
La sortie est la même. Essayez-le sur le Go Playground .