Maps
Pour déclarer une map vous devez utiliser le mot-clé map
suivi du type de clé et du type de value.
var x map[string]int
Dans cet exemple ci-dessus, nous avons créé une nil map qui attend un string en clé et un int en value.
func main() {
var x map[string]int
fmt.Printf("%T, %v", x,x )
}
Lorsque vous déclarez une nil map en go vous pouvez uniquement la lire , ce qui vous renvoie toujours la valeur zéro du type de valeur de la carte, mais vous ne pouvez rien ajouter, car la map n’est pas initialiser.
func main() {
var x map[string]int
fmt.Printf("x: %v\n", len(x))
x["chat"] = 2 // invalide ❌
fmt.Printf("x: %v\n", x)
//ce code ne fonctioneras pas ❌
}
Dans l’exemple ci dessous la variable x est initialisée
func main() {
var x = map[string]int{} // x a été initialiser
fmt.Printf("x: %v\n", len(x))
x["chat"] = 2 // valide ✅
fmt.Printf("x: %v\n", x)
//ce code est valide ✅
}
Make avec map
Si vous connaisez déjà la taille de la maps vous pouuvez utiliser le mot clé make
, ela map sera directment initialisée avec une taille et une capacité. pour en savoir plus sur make
consulter ce post ( make )
func main() {
var x = make(map[string]int, 1)
x["chat"] = 2
}
Quelque similarité avec Slice
Point commun :
- Les Maps s’agrandissent automatiquement au fur et à mesure que vous y ajoutez des paires clé/valeur.
- Si vous connaissez le nombre de paires clé/valeur que vous prévoyez d’insérer dans une map, vous pouvez utiliser make pour créer une map d’une taille initiale spécifique,
- vous pouvez utiliser make pour créer une map avec une taille initiale spécifique.
- Le passage d’une map à la fonction len vous indique le nombre de paires clé/valeur dans une map.
- La valeur zéro d’une map est nil.
- Les Maps ne sont pas comparables. Vous pouvez vérifier si elles sont égales à nil, mais vous ne pouvez pas vérifier si deux maps ont des valeurs identiques.
- vous ne pouvez pas vérifier si deux maps ont des clés et des valeurs identiques en utilisant == ou diffèrent en utilisant !=.
Acceder a la value d’une clé
func main() {
x := map[string]int{"chat" : 1}
println(x["chat"])
}
Insérer une nouvelle clé/value
func main() {
x := map[string]int{}
x["chat"] = 2
}
Ok Idiom
si vous voulez verifier qu’une clé existe vous pouvez utiliser le ok idiom, Dans l’exemple ci-dessous : le v represente la value et le ok est boolean si la variable existes ok deviens true sinon false
func main() {
x := map[string]int{}
x["chat"] = 2
v, ok := x["chat"]
println(v, ok)
}
supprimer une clé
Le mot-clé delete
permet de supprimer une clé de la map en 1er argument elle prends la maps et en second argument la clé a supprimer
func main() {
// initialise
x := map[string]int{}
// insert
x["chat"] = 2
// vef-rifier si une clé exist
v, ok := x["chat"]
println(v, ok )
// supprimer une clé
delete(x, "chat")
println( x["chat"])
Créer un set avec une maps
Un set est une structure de donnée dans lequel il n’y a pas de répétion, comme go n’a pas de built-in set
vous pouvez émuler un set comme ceci
x := map[int]bool{}
y :=[...]int{1,1,2,2,3,3,5,6,7,8,8,9}
for _, v := range y {
x[v] = true
}
println(x)
La variable x aura q’un exemplaire de chaque element de la variable x.