Junior — Middle
Защо при използване на map редът на елементите не е гарантиран и изглежда случаен?
sobes.tech AI
Отговор от AI
В Go вградената структура map е реализирана с помощта на хеш таблица, и редът на обхождане на елементите не е гарантиран и може да се променя между итерациите. Това се дължи на:
- Хеш-функцията разпределя ключовете по кофи, и редът на кофите не е фиксиран.
- За сигурност и за предотвратяване на зависимост от реда, от Go 1.0 нататък, редът на обхождане на map е специално рандомизиран при всяка итерация.
Затова при обхождане на map, редът на елементите изглежда случаен и не трябва да се използва в логиката на програмата. Ако е необходима сортирана изход, трябва отделно да се сортират ключовете:
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])
}
Така ще получите елементите в сортиран ред.