Порядок обхода элементов map в Go

Порядок обхода map не определён: a 1, b 2 и c 3 могут появиться в разной последовательности. На порядок вставки полагаться нельзя.

Короткий ответ

Что ответить на собеседовании

Порядок обхода map не определён: a 1, b 2 и c 3 могут появиться в разной последовательности. На порядок вставки полагаться нельзя.

Подробный разбор

Ответ с пояснениями

Условие

Дана структура map[string]int, содержащая три пары ключ‑значение. Какой порядок будет использован при переборе этой карты?

m := map[string]int{"a": 1, "b": 2, "c": 3}

for key, val := range m {
    fmt.Println(key, val)
}

Ответ: Порядок обхода не гарантируется и может отличаться при каждом запуске программы.

Ответ

Порядок обхода map не определён: a 1, b 2 и c 3 могут появиться в разной последовательности. На порядок вставки полагаться нельзя.

Правило относится не только к разным запускам: два обхода одной map тоже не обязаны совпасть. При отсутствии изменений каждая из трёх пар будет обработана один раз.

Если требуется стабильность, соберите ключи, отсортируйте их и печатайте значения по отсортированным ключам. Это стоит O(n log n) на сортировку и дополнительной памяти. Если нужен именно порядок добавления, храните его отдельно, например срезом ключей, а не пытайтесь получить его из range по map.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее