Passer au contenu principal
eLearner.app
Module 4 · Leçon 3 sur 518/50 dans le cours~12 min
Leçons du module (3/5)

Maps : clés et valeurs

Une map est une table de hachage clé → valeur : map[K]V. Les cartes proviennent de référence : Basculez vers une fonction partageant le même stockage. Ils doivent être initialisés avant que vous puissiez leur écrire (avec make ou littéral).

Création

Go
// con letterale
prices := map[string]int{"pane": 2, "latte": 3}

// con make
counters := make(map[string]int)
counters["a"] = 1

// nil map (leggibile, NON scrivibile)
var m map[string]int
fmt.Println(m["x"])    // 0 — ok
// m["y"] = 1          // PANIC

Opérations de base

Go
m := map[string]int{"a": 1}

m["b"] = 2              // insert/update
v := m["a"]             // get; se mancante: zero value
delete(m, "a")          // remove (ok anche se la chiave non esiste)
n := len(m)             // numero di entry

Virgule-ok : distinguer "manquant" de "valeur nulle"

Go
v, ok := m["x"]
if !ok {
    fmt.Println("chiave assente")
} else {
    fmt.Println("trovata:", v)
}

C'est le seul moyen de savoir si une clé existe, car m["x"] renvoie la valeur zéro même si la clé n'est pas là. Modèle fondamental.

Itération : ordre aléatoire

Go
for k, v := range m {
    fmt.Println(k, v)
}

Clés : types comparables uniquement

Les clés doivent être comparables : string, chiffres, bool, pointeurs, canaux, interfaces, tableaux de types comparables, structures de champs comparable. La tranche, la carte et la fonction ne sont pas comparables → elles ne le peuvent pas être des clés.

Go
m := map[[2]int]string{}   // ok: array è comparable
// m := map[[]int]string{} // ERRORE: slice non è comparable

Modèle : compteurs

L'une des utilisations les plus courantes de la carte :

Go
words := []string{"a", "b", "a", "c", "b", "a"}
freq := map[string]int{}
for _, w := range words {
    freq[w]++   // l'accesso a una chiave mancante è 0 → 0+1 = 1
}
// freq = {"a": 3, "b": 2, "c": 1}

Essayez-le vous-même

Exercice#go.m4.l3.e1
Tentatives : 0Chargement…

Créez un map[string]int avec les valeurs 'a' -> 1 et 'b' -> 2, puis ajoutez 'c' -> 3.

Chargement de l'éditeur…
Afficher l'indice

Littéral : `map[K]V{"chiave": valore, ...}`.

Solution disponible après 3 tentatives

Exercice#go.m4.l3.e2
Tentatives : 0Chargement…

Utilisez le modèle virgule-ok pour lire la clé « x » (non présente) dans v, ok et imprimez les deux.

Chargement de l'éditeur…
Afficher l'indice

Double résultat : valeur et présence booléenne.

Solution disponible après 3 tentatives

Quiz#go.m4.l3.e3
Prêt

Que se passe-t-il lorsque vous écrivez zéro sur une carte ?

Go
var m map[string]int
m["a"] = 1
Options de réponse

Récapitulatif

  • map[K]V : clé-valeur, référence, basée sur un hachage.
  • Initialiser avec make ou littéral ; carte nulle → panique à l'écriture.
  • v, ok := m[k] est le seul moyen de distinguer « absent » de « valeur nulle ».
  • delete(m, k) supprimer ; ok même si k n'existe pas.
  • Itération range : ordre randomisé.
  • Clés : types comparables uniquement (pas de slice/map/func).
  • Modèle de compteur : freq[k]++ exploite la valeur zéro implicite.