Go map字典排序
前言
我们已经知道 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
该结果是按照键名在字母表中的排序进行升序排序的结果。
键值对调
所谓键值对调,指的是交换字典的键和值,在一些编程语言中,内置了相应的函数,比如 PHP 的 array_flip
函数。在 Go 语言中,我们需要手动编写代码来实现,如果我们要对调 testMap
字典的键值,可以这么做:
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
该结果是按照键值对应数字大小进行升序排序的结果。
另外,你可能已经注意到我们在对切片进行排序时,使用了 Go 语言内置的 sort
包,这个包提供了一系列对切片和用户自定义集合进行排序的函数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通