Ответ
В Go map
является неупорядоченной коллекцией. Порядок итерации по её элементам не гарантируется и может меняться. Чтобы получить значения, отсортированные по ключам, необходимо выполнить следующие шаги:
- Извлечь ключи: Создать отдельный срез (slice) и скопировать в него все ключи из
map
. - Отсортировать ключи: Использовать стандартный пакет
sort
для сортировки среза с ключами. - Итерироваться по отсортированным ключам: Пройтись в цикле по отсортированному срезу ключей и, используя каждый ключ, получить соответствующее значение из исходной
map
.
Пример для ключей типа int
package main
import (
"fmt"
"sort"
)
func main() {
m := map[int]string{
3: "three",
1: "one",
4: "four",
2: "two",
}
// 1. Получаем ключи
keys := make([]int, 0, len(m))
for k := range m {
keys = append(keys, k)
}
// 2. Сортируем ключи
sort.Ints(keys)
// 3. Получаем значения по отсортированным ключам
fmt.Println("Отсортированные значения:")
for _, k := range keys {
fmt.Printf("Ключ: %d, Значение: %sn", k, m[k])
}
}
Вывод:
Отсортированные значения:
Ключ: 1, Значение: one
Ключ: 2, Значение: two
Ключ: 3, Значение: three
Ключ: 4, Значение: four
Общий подход для любых типов ключей
Для ключей других типов (например, string
) используйте соответствующие функции (sort.Strings
). Если ключи имеют сложный тип (например, структура), используйте sort.Slice
с кастомной функцией сравнения.