Порядок обхода map не определён: a 1, b 2 и c 3 могут появиться в разной последовательности. На порядок вставки полагаться нельзя.
Порядок обхода элементов map в Go
Порядок обхода 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.