Sobes.tech
Junior — Middle

¿Por qué al usar map el orden de los elementos no está garantizado y parece aleatorio?

sobes.tech AI

Respuesta de la IA

En Go, la estructura incorporada map se implementa utilizando una tabla hash, y el orden de recorrido de los elementos no está garantizado y puede cambiar entre iteraciones. Esto se debe a que:

  • La función hash distribuye las claves en buckets, y el orden de los buckets no es fijo.
  • Para seguridad y para prevenir dependencias del orden, desde Go 1.0, el orden de recorrido del map se aleatoriza específicamente en cada iteración.

Por lo tanto, al recorrer un map, el orden de los elementos parece aleatorio y no debe usarse en la lógica del programa. Si se necesita una salida ordenada, se deben ordenar las claves por separado:

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])
}

De esta manera, obtendrás los elementos en orden ordenado.