Сортировка с использованием sort.Slice
Если версия Go позднее 1.7, мы можем использовать функцию sort.Slice
для быстрой сортировки словаря (map) по ключу или значению. Функция sort.Slice
позволяет указать пользовательскую функцию сравнения.
Вот пример:
package main
import (
"fmt"
"sort"
)
func main() {
m1 := map[int]int{
21: 99,
12: 98,
35: 17,
24: 36,
}
type kv struct {
Key int
Value int
}
var s1 []kv
for k, v := range m1 {
s1 = append(s1, kv{k, v})
}
sort.Slice(s1, func(i, j int) bool {
return s1[i].Key < s1[j].Key
})
fmt.Println("Sorted in ascending order by key:")
for _, pair := range s1 {
fmt.Printf("%d, %d\n", pair.Key, pair.Value)
}
}
Запустите программу:
go run ~/project/map.go
Вывод выглядит следующим образом:
Sorted in ascending order by key:
12, 98
21, 99
24, 36
35, 17
В этой программе мы использовали структуру kv
для хранения пар ключ-значение из словаря. Затем мы отсортировали срез структур с помощью функции sort.Slice()
и анонимной функции сравнения. Эта функция сравнения (func(i, j int) bool
) определяет порядок сортировки на основе поля Key
нашей структуры.
Мы также можем использовать sort.Slice
для сортировки словаря в порядке убывания по ключу или в порядке возрастания по значению, изменив эту функцию сравнения. Это обеспечивает большую гибкость в сортировке данных словаря.