Назад к вопросам
Junior — Middle
75
Почему при использовании map порядок элементов не гарантирован и кажется случайным?
Компании, где спрашивали
Digital Spirit
Ответ от нейросети
sobes.tech 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])
}
Так вы получите элементы в отсортированном порядке.