前言

我们已经知道 Go 语言的字典是一个无序集合,如果你想要对字典进行排序,可以通过分别为字典的键和值创建切片,然后通过对切片进行排序来实现。

按照键进行排序

如果要对字典按照键进行排序,可以这么做:

keys := make([]string, 0)
for k, _ := range testMap {
    keys = append(keys, k)
}
sort.Strings(keys)  // 对键进行排序
fmt.Println("Sorted map by key:")
for _, k := range keys {
    fmt.Println(k, testMap[k])
}

上述代码打印结果是:

Sorted map by key:
one 1
three 3
two 2

该结果是按照键名在字母表中的排序进行升序排序的结果。

键值对调
array_fliptestMap
invMap := make(map[int] string, 3)
for k, v := range testMap {
    invMap[v] = k
}
for k, v := range invMap {
    fmt.Println(k, v)
}

上述代码的打印结果是:

3 three
1 one
2 two
按照值进行排序

如果要对字典按照值进行排序,可以这么做:

values := make([]int, 0)
for _, v := range testMap {
    values = append(values, v)
}
sort.Ints(values)   // 对值进行排序
fmt.Println("Sorted map by value:")
for _, v := range values  {
    fmt.Println(invMap[v], v)
}
invMap
Sorted map by value:
one 1
two 2
three 3

该结果是按照键值对应数字大小进行升序排序的结果。

sort