golang 中没有专门的 map 排序函数,且 map 默认是无序的,也就是你写入的顺序和打印的顺序是不一样的。

m := make(map[string]string, 0)
m["one"] = "one"
m["two"] = "two"
m["three"] = "three"// 下面两次 for 循环输出的顺序是不一致的
for _, str := range m {fmt.Println(str)}
for _, str := range m {fmt.Println(str)}

如果针对的是简单的 key、value 的形式,可以先把 key 收集到一个 slice 里,然后给 slice 排序,再循环输出对应的 value 即可。

m := make(map[int]string, 0)
m[3] = "three"
m[1] = "one"
m[2] = "two"var i []int
for key, _ := range m {i = append(i, key)
}
sort.Ints(i)
for _, v := range i {fmt.Println(m[v]) // 分别输出 one two three
}

但若要对 golang 的 map 按照 value 进行排序,比如实现网址访问量从高低排序,思路却是不能用 map,而要用 struct 存放 key 和 value,实现 sort 接口,就可以调用 sort。

先封装成个库

package utiltype MapSorter []Itemtype Item struct {Key stringVal int64
}func NewMapSorter(m map[string]int64) MapSorter {ms := make(MapSorter, 0, len(m))for k, v := range m {ms = append(ms, Item{k, v})}return ms
}func (ms MapSorter) Len() int {return len(ms)
}func (ms MapSorter) Less(i, j int) bool {return ms[i].Val > ms[j].Val // 按值排序//return ms[i].Key < ms[j].Key // 按键排序
}func (ms MapSorter) Swap(i, j int) {ms[i], ms[j] = ms[j], ms[i]
}

最后来引用它

m := make(map[string]int64, 0)
m["/v1/tasks"] = 1234
m["/v1/index"] = 100000
m["/v1/comment"] = 18000m1 := util.NewMapSorter(m)
sort.Sort(m1)
fmt.Println(m1) // [{/v1/index 100000} {/v1/comment 18000} {/v1/tasks 1234}]

golang 中 map 排序相关推荐

  1. golang对map排序

    golang中map元素是随机无序的,所以在对map range遍历的时候也是随机的,不像php中是按顺序.所以如果想按顺序取map中的值,可以采用以下方式: import ("fmt&qu ...

  2. go 中 map 排序

    一 点睛 1 golang 中没有一个专门的方法针对 map 的 key 进行排序. 2 golang 中的 map 默认是无序的,注意也不是按照添加的顺序存放的,每次遍历,得到的输出可能不一样. 3 ...

  3. golang 中 map 转 struct

    golang 中 map 转 struct package mainimport ("fmt""github.com/goinggo/mapstructure" ...

  4. golang 中map 和slice 索引速度比较

    主文件 package mainvar max = 100 var Slice = make([]int, max+10) var Map = make(map[int]int)func init() ...

  5. java中map排序(SortedMap的用法)

    package JavaSenior; import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; ...

  6. golang中map并发读写问题及解决方法

    这是一个创建于 2017-03-05 06:02:54 的文章,其中的信息可能已经有所发展或是发生改变. 一.map并发读写问题 如果map由多协程同时读和写就会出现 fatal error:conc ...

  7. 【golang学习总结】10 golang中map用法

    本文介绍SpringBoot相关内容.和[跨考菌]一起加油吧~ 如果你有收获,记得帮博主一键三连哦

  8. Golang 中 map 探究

    动手点关注 干货不迷路 

  9. golang map 排序

    golang中map元素是随机无序的,所以在对map range遍历的时候也是随机的,不像php中是按顺序.所以如果想按顺序取map中的值,可以采用以下方式: import ("fmt&qu ...

最新文章

  1. 泛化,关联,聚合,合成,依赖的关系
  2. Java基础之随机生成数字和字母
  3. mysql的基础命令
  4. python编程案例教程书籍-清华大学出版社-图书详情-《Python案例教程》
  5. UA MATH564 概率分布1 二项分布下
  6. Qt Creator设置一个Autotools项目
  7. SAP UI5 应用开发教程之六十二 - 基于 OData V4 的 SAP UI5 表格控件使用方法介绍试读版
  8. 使用 OPEN SQL 语句读取数据库表数据的一个补充练习
  9. C#WinForm WebBrowser (二) 实用方法总结
  10. python封装继承多态_浅谈JavaScript的面向对象和它的封装、继承、多态
  11. python读取行、分割、存储_Pytables / Pandas:组合(读取?)按行分割的多个HDF5存储...
  12. 什么是pisa测试_什么是好作业?十年前,上海开启一项作业改革探索,专家发现了这些问题……...
  13. centos7.6(腾讯云)开放端口及配置腾讯云安全组
  14. Nginx 从入门到放弃(三)
  15. python求解给定一字符串列表判定每个字符串可以构成的所有序列中回文序列的数目
  16. 软件开发基本流程【一】
  17. C语言中EOF什么意思
  18. 【203】SSL证书常见格式转换
  19. 【Deep Learning 5】FNN前馈神经网络
  20. 如何添加旺旺客户,淘宝店铺左侧代码

热门文章

  1. mac 系统数据过大
  2. PHP检测分享朋友圈有没有删除,微信朋友圈检测:教你如何清除已删除你的微信好友?...
  3. 【Unity3D开发小游戏】《打地鼠游戏》Unity开发教程
  4. 【微信小程序学习】 保存cookie到Storage中,通过cookie获取视频的数据
  5. Twemproxy——针对MemCached与Redis的代理
  6. 【个人开发】通过企业微信实现消息推送到个人微信
  7. 【高并发项目实战】千万级购物车系统缓存架构方案
  8. json转化为dataframe 和dataframe转化为json
  9. 【Linux学习笔记】Linux镜像的下载与获取
  10. 后悔学计算机软件技术,学计算机专业你后悔吗?为什么?