Go语言map排序
一、按照key排序
按照key排序先要取出map中的key放入切片中,将切片排序后再取出value。
import (
"fmt"
"sort"
)
func main() {
m := map[int]string{
1: "hello",
123: "my",
456: "homepage",
11: "gopher",
34: "welcome",
45: "to",
}
var s []int
// 将key取出并放入s
for k := range m {
s = append(s, k)
}
// 将s排序
sort.Ints(s)
// 取出value
for _, k := range s {
fmt.Printf("key = %d, value = %s\n", k, m[k])
}
}
// key = 1, value = hello
// key = 11, value = gopher
// key = 34, value = welcome
// key = 45, value = to
// key = 123, value = my
// key = 456, value = homepage
二、按照value排序
按照value排序也是先要取出map中的key放入切片中,将切片按照value排序(用到sort.Slice()函数)后再取出value。
import (
"fmt"
"sort"
)
func main() {
m := map[int]string{
1: "a",
2: "c",
3: "e",
4: "b",
5: "d",
6: "f",
}
keys := make([]int, 0, len(m))
// 取出key
for k := range m {
keys = append(keys, k)
}
// 将key按照value进行排序
sort.Slice(keys, func(i, j int) bool {
return m[keys[i]] < m[keys[j]]
})
for _, k := range keys {
fmt.Printf("key = %d, value = %s\n", k, m[k])
}
}
// key = 1, value = a
// key = 4, value = b
// key = 2, value = c
// key = 5, value = d
// key = 3, value = e
// key = 6, value = f
记得以前刷题遇到过一个题目:计算给定字符串中字符出现的次数并按照降序排序。
根据上例,我们可以很容易写出方案:
import (
"fmt"
"sort"
)
func main() {
str := "goMapSortCase"
m := make(map[string]int)
s := make([]string, 0, len(str))
for _, v := range str {
m[string(v)]++
}
for k := range m {
s = append(s, k)
}
sort.Slice(s, func(i, j int) bool {
return m[s[i]] > m[s[j]]
})
for _, key := range s {
fmt.Printf("%s %d;", key, m[key])
}
}
// o 2;a 2;p 1;r 1;s 1;e 1;g 1;M 1;S 1;t 1;C 1;

查看12道真题和解析
