Go语言map排序(key/value排序)

  • 1、前言
  • 2、实现map遍历有序
    • 2.1 key有序
      • 2.1.1 从小到大排序
      • 2.1.2 从大到小排序
    • 2.2 value有序
      • 2.2.1 从小到大排序
      • 2.2.2 从大到小排序

1、前言

Go语言的map是无序的,多次遍历map的结果可能是不同的,比如:

package mainimport ("fmt"
)func Map() (result map[int]uint32) {result = map[int]uint32{}// 插入各个数据result[24] = 240result[17] = 170result[9] = 90result[11] = 110result[55] = 550return
}
func main() {mapResult := Map()// 遍历mapfor 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 mainimport ("fmt""sort"
)func Map() (result map[int]uint32, keys []int) {result = map[int]uint32{}keys = []int{}// 插入各个数据result[24] = 240result[17] = 170result[9] = 90result[11] = 110result[55] = 550// 得到各个keyfor key := range result {keys = append(keys, key)}// 给key排序,从小到大sort.Sort(sort.IntSlice(keys))return
}
func main() {mapResult, keys := Map()// 遍历mapfor _, key := range keys {fmt.Printf("key = %v,value = %v\n", key, mapResult[key])}
}

结果:

2.1.2 从大到小排序

sort.Sort(sort.Reverse(sort.IntSlice(keys)))

代码如下:

package mainimport ("fmt""sort"
)func Map() (result map[int]uint32, keys []int) {result = map[int]uint32{}keys = []int{}// 插入各个数据result[24] = 240result[17] = 170result[9] = 90result[11] = 110result[55] = 550// 得到各个keyfor key := range result {keys = append(keys, key)}// 给key排序,从大到小sort.Sort(sort.Reverse(sort.IntSlice(keys)))return
}
func main() {mapResult, keys := Map()// 遍历mapfor _, 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 mainimport ("fmt""sort"
)func main() {mapInfo := map[string]int32{"roy":18,"kitty":16,"hugo":21,"tina":35,"jason":23,}type peroson struct {Name stringAge int32}var lstPerson []perosonfor 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 mainimport ("fmt""sort"
)func main() {mapInfo := map[string]int32{"roy":   18,"kitty": 16,"hugo":  21,"tina":  35,"jason": 23,}type peroson struct {Name stringAge  int32}var lstPerson []perosonfor 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)
}

结果:

Go语言map排序(key/value排序)相关推荐

  1. java map key 升序_Java Map 按 key 升序排序

    最近开发微信和支付宝的服务端支付,涉及到字典的排序和 url 参数转换成字典的操作,整理了一个工具类: import java.util.ArrayList; import java.util.Col ...

  2. 关于map对key自定义排序

    map对key默认是从小到大排序 也可以自定义排序 #include <iostream> #include <map> #include <string> // ...

  3. go语言map按照key,value进行排序

    1. go语言的map是无序的,多次遍历map的结果可能是不同的 举例如下: package main import ("fmt" ) // GetMap 得到map func G ...

  4. Java小知识-----Map 按Key排序和按Value排序

    Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value). 1.按键排序 jdk内置的java.util包下的Tr ...

  5. Map根据Key值进行排序(升序加降序)

    Map根据Key值进行排序 如果这篇文章对你有帮助的话,希望可以给博主点个赞,感谢!! 今天在写一个功能的时候,需要根据日期进行分组,于是我从数据库查找的时候就使用order by create_ti ...

  6. stream流倒序排序_java8 stream 操作map根据key或者value排序的实现|chu

    引言 最近小编自己一个人在负责一个项目的后台开发,其中有一部分是统计相关的功能,所以需要一些排序或者分组的操作,之前这种操作小编觉得还是比较麻烦的,虽热有一些现成的工具类,但是工具类的写法也是比较复杂 ...

  7. Go 学习笔记(12)— 字典map定义、初始化、读取字典、删除字典、清空字典、map 按 key 进行有序遍历

    Go 中字典也叫做 map , map 是一种无序的键值对的集合. map 最重要的一点是通过 key 来快速检索数据, key 类似于索引,指向数据的值. 1. 字典定义 可以使用内建函数 make ...

  8. Map 四种获取 key 和 value 值的方法,以及对 map 中的元素排序

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 获取map的值主要有四种方法,分为两类: 调用 map.keySet() 方法来获取 key ...

  9. Map四种获取key和value值的方法,以及对map中的元素排序

    2019独角兽企业重金招聘Python工程师标准>>> 获取map的值主要有四种方法,这四种方法又分为两类: 一类是调用map.keySet()方法来获取key和value的值, 另 ...

最新文章

  1. MLNG_机器学习的动机与应用
  2. 快速记忆python函数-【速学速记】Python 高阶函数
  3. 分布式项目启动时报错:Duplicate spring bean id XXX
  4. mysql 存储过程 嵌套if_mysql存储过程if嵌套if的写法
  5. Dottrace跟踪代码执行时间
  6. 洛谷 P1849 [USACO12MAR]拖拉机Tractor
  7. Git - 修改用户名
  8. 详解Linux下通过yum安装Mariadb/MySQL数据库(腾讯云也适用)
  9. activemq jdbc mysql_activeMQ JDBC Master Slave
  10. scala-数组操作
  11. 计算机更新安装失败,电脑更新安装失败
  12. 剑指offer——面试题42-1:左旋转字符串
  13. 7天下载破千万,让你“变老”的FaceApp如何爆发式增长?
  14. static关键字的用法
  15. 2020电子设计竞赛G题 - 非接触物体尺寸形态测量
  16. 第十一届蓝桥杯省赛:纪念日
  17. unity实战 手机屏幕适配
  18. Android开发唯一的出路:进阶学习,android实战pdf
  19. 华为云平台部署虚拟机-SinoDB
  20. 诺基亚e65 ucweb 6.7正式免签名下载

热门文章

  1. linux arm panic,ARM Linux 内核 panic 之cache 一致性 ——Cortex-A9多核cache和TLB一致性广播...
  2. php wasm,wasm总结
  3. iqooz6和iqooneo6se区别 iqoo z6和iqoo neo6se哪个好
  4. 【WORD文档部分消失】元素结束标记中的名称必须与开始标记中的元素类型相匹配
  5. 巧用Photoshop路径造型做连体字特效
  6. Android APP检查设备是否为平板
  7. 怀念旧时那一丝丝温暖的味道
  8. Python文本词频率统计---学习记录
  9. 小度音箱出bug 刷脸解锁可用照片替代
  10. golang goroutine实现_Go语言潜力有目共睹,但它的Goroutine机制底层原理你了解吗?...