Sobes.tech
Junior — Middle

Pourquoi l'utilisation de map ne garantit pas l'ordre des éléments et semble aléatoire?

sobes.tech IA

Réponse de l'IA

Dans Go, la structure intégrée map est implémentée à l’aide d’une table de hachage, et l’ordre de parcours des éléments n’est pas garanti et peut changer entre les itérations. Cela est dû à :

  • La fonction de hachage répartit les clés dans des buckets, et l’ordre des buckets n’est pas fixe.
  • Pour des raisons de sécurité et pour éviter la dépendance à l’ordre, à partir de Go 1.0, l’ordre de parcours du map est spécifiquement randomisé à chaque itération.

Par conséquent, lors de l’itération sur un map, l’ordre des éléments semble aléatoire et ne doit pas être utilisé dans la logique du programme. Si une sortie ordonnée est nécessaire, il faut trier séparément les clés :

m := map[string]int{"b": 2, "a": 1, "c": 3}
keys := make([]string, 0, len(m))
for k := range m {
    keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
    fmt.Println(k, m[k])
}

Ainsi, vous obtiendrez les éléments dans un ordre trié.