Dictionnaires - map
On commence par créer un dictionnaire vide en précisant le type des clés et le type des valeurs.
m := make(map[string]int)
Dans ce cas `m` sera un dictionnaire dont les clés sont des chaînes de caractères et les valeurs sont des entiers.
Ensuite on peut ajouter des paires clé - valeur :
m["chien"] = 4 m["poule"] = 2 m["escargot"] = 1
La fonction len renvoie le nombre de paires.
La fonction delete supprime une paire
delete(m, "chien")
La lecture d'une valeur est habituel :
x := m["poule"] // x est initialisé avec la valeur 2
Cas de clés manquantes
Prenons le code suivant
package main
import "fmt"
func main() {
fmt.Println("Hello, playground")
m:= make(map[string]int)
m["chien"] = 4
m["serpent"] = 0
var x int = m["chien"]
var y int = m["lapin"]
var z int = m["serpent"]
fmt.Println(x)
fmt.Println(y)
fmt.Println(z)
}
"chien" est présent dans le dictionnaire, x prendra donc la valeur 4 . z de la même façon devrait prendre la valeur 0.
Mais qu'en est-il de y ?
Il n'y aura pas d'erreur. y recevra une valeur nulle par défaut. Si les valeurs avaient étaient été de type string, y aurait reçu "", un texte vide. Comme le tableau contient des entiers, y reçoit une valeur nulle. Donc y reçoit 0.
Ce mécanisme évite les erreurs mais peut-être ennuyeux car il ne permet pas de distinguer le vrai 0 présent dans le dictionnaire pour "serpent" et le faux 0 qui ne correspond à rien dans le dictionnaire…
Si on a besoin de lever le doute, un mécanisme existe :
var y, p := m["lapin"]
la lecture dans le dictionnaire renvoie ici deux résultats, une valeur pour y qui dans ce cas est un 0 par défaut vu que "lapin" n'est pas dans le dictionnaire, et un booléen qui indique si la clé a été trouvée. Ici, p sera false vu que “lapin” n'était pas dans le dictionnaire.
