Junior — Middle
Dlaczego podczas korzystania z mapy kolejność elementów nie jest gwarantowana i wydaje się losowa?
sobes.tech AI
Odpowiedź od AI
W Go wbudowana struktura map jest zaimplementowana przy użyciu tablicy haszującej, a kolejność iteracji elementów nie jest gwarantowana i może się zmieniać między iteracjami. Wynika to z:
- Funkcja haszująca rozkłada klucze na kubełki, a kolejność kubełków nie jest stała.
- Dla bezpieczeństwa i zapobiegania zależności od kolejności, od Go 1.0, kolejność iteracji mapy jest specjalnie losowo zmieniana przy każdej iteracji.
Dlatego podczas iteracji po mapie, kolejność elementów wydaje się losowa i nie powinna być używana w logice programu. Jeśli potrzebny jest uporządkowany wynik, należy osobno posortować klucze:
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])
}
W ten sposób otrzymasz elementy w posortowanej kolejności.