Go语言map排序(key/value排序)
Go语言map排序(key/value排序)
1、前言
Go语言的map是无序的,多次遍历map的结果可能是不同的,比如:
package main import ( "fmt" ) func Map() (result map[int]uint32) { result = map[int]uint32{} // 插入各个数据 result[24] = 240 result[17] = 170 result[9] = 90 result[11] = 110 result[55] = 550 return } func main() { mapResult := Map() // 遍历map for key, value := range mapResult { fmt.Printf("key = %v,value = %v\n", key, value) } }
第一次遍历结果如下:
第二次遍历结果如下:
可以看到两次遍历的结果是不同的
2、实现map遍历有序
2.1 key有序
思路:对key排序,再遍历key输出value
2.1.1 从小到大排序
sort.Sort(sort.IntSlice(keys))
代码如下:
package main import ( "fmt" "sort" ) func Map() (result map[int]uint32, keys []int) { result = map[int]uint32{} keys = []int{} // 插入各个数据 result[24] = 240 result[17] = 170 result[9] = 90 result[11] = 110 result[55] = 550 // 得到各个key for key := range result { keys = append(keys, key) } // 给key排序,从小到大 sort.Sort(sort.IntSlice(keys)) return } func main() { mapResult, keys := Map() // 遍历map for _, key := range keys { fmt.Printf("key = %v,value = %v\n", key, mapResult[key]) } }
结果:
2.1.2 从大到小排序
sort.Sort(sort.Reverse(sort.IntSlice(keys)))
代码如下:
package main import ( "fmt" "sort" ) func Map() (result map[int]uint32, keys []int) { result = map[int]uint32{} keys = []int{} // 插入各个数据 result[24] = 240 result[17] = 170 result[9] = 90 result[11] = 110 result[55] = 550 // 得到各个key for key := range result { keys = append(keys, key) } // 给key排序,从大到小 sort.Sort(sort.Reverse(sort.IntSlice(keys))) return } func main() { mapResult, keys := Map() // 遍历map for _, key := range keys { fmt.Printf("key = %v,value = %v\n", key, mapResult[key]) } }
结果:
2.2 value有序
用struct存放key和value,实现sort接口,就可以调用sort.Sort进行排序了
2.2.1 从小到大排序
package main import ( "fmt" "sort" ) func main() { mapInfo := map[string]int32{ "roy":18, "kitty":16, "hugo":21, "tina":35, "jason":23, } type peroson struct { Name string Age int32 } var lstPerson []peroson for k, v := range mapInfo { lstPerson = append(lstPerson, peroson {k, v}) } sort.Slice(lstPerson, func(i, j int) bool { return lstPerson[i].Age < lstPerson[j].Age // 升序 }) fmt.Println(lstPerson) }
结果:
2.2.2 从大到小排序
package main import ( "fmt" "sort" ) func main() { mapInfo := map[string]int32{ "roy": 18, "kitty": 16, "hugo": 21, "tina": 35, "jason": 23, } type peroson struct { Name string Age int32 } var lstPerson []peroson for k, v := range mapInfo { lstPerson = append(lstPerson, peroson{k, v}) } sort.Slice(lstPerson, func(i, j int) bool { return lstPerson[i].Age > lstPerson[j].Age // 降序 }) fmt.Println(lstPerson) }
结果:
本文作者:皮埃尔的撒哈拉
本文链接:https://www.cnblogs.com/wyc-1009/p/17548139.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步