Comment fonctionne le type de données Map en Go?
sobes.tech IA
Réponse de l'IA
Map — c’est une collection non ordonnée de paires "clé-valeur" en Go.
Caractéristiques:
- Les clés doivent être des types de données comparables (nombres, chaînes, booléens, pointeurs, canaux, interfaces, si le type dynamique est comparable, et tableaux si leurs éléments sont comparables). Les slices, fonctions et autres maps ne peuvent pas être utilisés comme clés.
- Les valeurs peuvent être de n’importe quel type.
- Map est un type de référence, ce qui signifie qu’une variable de type map contient un pointeur vers la structure de données map en mémoire. Modifier le map via une variable sera visible à travers d’autres variables référant au même map.
- La valeur nulle pour un map est
nil. On ne peut pas écrire dans un mapnil; tenter de le faire provoquera une panique. - La taille du map change dynamiquement à mesure que des éléments sont ajoutés ou supprimés.
Implémentation interne: Map en Go est implémenté comme une table de hachage (hash table). Chaque clé est hachée, et le résultat du hachage est utilisé pour déterminer la position de la valeur associée dans la table.
// Création d’un map
m := make(map[string]int)
// Ajout d’éléments
m["un"] = 1
m["deux"] = 2
// Récupération d’une valeur
value, ok := m["un"] // value = 1, ok = true
value, ok = m["trois"] // value = 0 (valeur zéro pour int), ok = false
// Suppression d’un élément
delete(m, "deux")
// Itération sur le map (l’ordre n’est pas garanti)
for key, value := range m {
// ...
}
Comparaison de maps : Deux maps sont considérés égaux uniquement si ils font référence à la même structure interne, c’est-à-dire, map1 == map2 seulement si map1 et map2 sont la même variable. La comparaison du contenu d’un map avec == n’est pas autorisée. Pour comparer le contenu, il faut itérer sur les deux maps et comparer leurs éléments.
Performance : Les opérations d’accès, d’ajout et de suppression dans un map ont en moyenne une complexité O(1). Dans le pire cas (par exemple, avec beaucoup de collisions de hachage), elles peuvent prendre O(n) en temps.