Junior — Middle
De ce, atunci când folosiți map, ordinea elementelor nu este garantată și pare aleatorie?
sobes.tech AI
Răspuns de la AI
În Go, structura încorporată map este implementată folosind o tabelă de dispersie, iar ordinea de parcurgere a elementelor nu este garantată și poate varia între iterații. Acest lucru se datorează faptului că:
- Funcția hash distribuie cheile pe containere, iar ordinea containerelor nu este fixă.
- Pentru siguranță și pentru a preveni dependența de ordine, începând cu Go 1.0, ordinea de parcurgere a map-ului este special aleatorizată la fiecare iterație.
Prin urmare, la parcurgerea unui map, ordinea elementelor pare aleatorie și nu trebuie utilizată în logica programului. Dacă este nevoie de o ieșire ordonată, trebuie sortate separat cheile:
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])
}
Astfel, veți obține elementele în ordine sortată.