Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goPmMpOr 192 of 350 menu
◀ ▶

Порядок обхода карты в Go

Порядок, в котором цикл отдает пары, не закреплен. Один и тот же код при разных запусках может напечатать строки в другой последовательности. На это нельзя опираться в логике программы.

Добавим три ключа по очереди и обойдем карту:

room := make(map[string]int) room["first"] = 1 room["second"] = 2 room["third"] = 3 for k, v := range room { fmt.Println(k, v) }

На экране три строки, но порядок ключей может не совпадать с порядком записи "first", "second", "third". Сравнивать удобнее по ключам внутри тела, а не по номеру строки вывода.

Если нужен предсказуемый порядок, сначала собирают ключи в срез, сортируют срез в разделе про срезы и идут по нему, читая карту по каждому ключу. Здесь достаточно запомнить: обход карты сам по себе порядок не гарантирует.

ages := map[string]int{"ann": 20, "bob": 30} for k := range ages { fmt.Println(k) }

Дана следующая карта:

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

Обойдите room дважды подряд двумя циклами и сравните вывод. Обязан ли порядок совпасть между циклами?

Почему нельзя считать, что первый напечатанный ключ был добавлен первым?

Дана следующая карта:

line := map[string]int{"first": 1, "second": 2, "third": 3}

Выведите пары циклом и запишите, зависит ли порядок строк от порядка в литерале.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить