Junior — Middle
Por que, ao usar map, a ordem dos elementos não é garantida e parece aleatória?
sobes.tech IA
Resposta da IA
No Go, a estrutura incorporada map é implementada usando uma tabela de dispersão, e a ordem de percorrer os elementos não é garantida e pode mudar entre iterações. Isto deve-se a:
- A função hash distribui as chaves pelos baldes, e a ordem dos baldes não é fixa.
- Para segurança e para evitar dependência da ordem, a partir do Go 1.0, a ordem de percorrer o map é especificamente aleatorizada em cada iteração.
Portanto, ao percorrer um map, a ordem dos elementos parece aleatória e não deve ser usada na lógica do programa. Se for necessária uma saída ordenada, deve-se ordenar as chaves separadamente:
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])
}
Assim, obterá os elementos em ordem ordenada.