Golang-Maps有序化遍历

Go的map元素遍历顺序(使用range关键字)是随机的,而不是遵循元素的添加顺序,为解决这一问题,可使用下面的遍历方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import (
"fmt"
"sort"
)

func main() {
map1 := map[int]string{
0: "java",
1: "golang",
2: "python",
}

var keys []int
for key := range map1 {
keys = append(keys, name)
}
sort.Ints(keys)
for _, key := range keys {
fmt.Printf("%s\t%d\n", key, map1[key])
}
}

可以看到,其关键思路就是先把所有Key拿出来排序,再按照排序后的进行遍历,主要用到了sort包的东西

关于sort还有些更个性化的用法,再看下面一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package main

import (
"fmt"
"sort"
)

type Person struct {
Name string
Age int16
}

type personSlice []Person

func (p personSlice) Len() int {
return len(p)
}

func (p personSlice) Less(i, j int) bool {
return p[i].Age > p[j].Age
}

func (p personSlice) Swap(i, j int) {
p[i], p[j] = p[j], p[i]
}

func main() {
people := personSlice{
{Name: "张三", Age: 10},
{Name: "王五", Age: 50},
{Name: "李四", Age: 30},
}
sort.Sort(people)
fmt.Println(people)
}

// [{王五 50} {李四 30} {张三 10}]

通过实现go/src/sort/sort.Interface接口,自行指定struct结构体的排序规则,这一点跟java何其相似。

# Golang

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×