golang 如何返回一个有序的map类型的数据
golang的map我们知道是无序的, 可是实际应用的时候, 我回经常需要返回一个有序的格式
比如list列表按时间分组排序, 这种的实现思路 应该如何呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
golang的map我们知道是无序的, 可是实际应用的时候, 我回经常需要返回一个有序的格式
比如list列表按时间分组排序, 这种的实现思路 应该如何呢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
使用数组或链表来记录map的顺序,遍历的时候根据数组或链表来遍历。
map 和 list一起,缺点就是要额外的申请空间,具体问题具体对待吧
结合 @andy_spf @__陈亚荣 的回答做个conclusion吧
1.如果按照map的key排序:key入slice,然后排序slice(sort包),然后map借助排序后的slice按序输出
参照: 链接描述
2.如果按照val的排序,且val本身是复杂的数据结构,例如struct,那么思路是:将kv构建为struct,然后实现struct的sort(实现sort包的接口),并遍历struct输出
3.@andy_spf 大佬总结的很到位,那个github的项目可以直接哪来用(理解代码思路后)
两种场景:
1.自己程序内的话尽量是按照结构体子段排序,走sort接口自定义结构体排序规则就可以了。
2.如果是由于业务,和其他模块交互场景必须对map排序返回有序的json字符串,可以考虑从序列化入手,想省事的话可以直接用第三方库github.com/iancoleman/orderedmap
go
的sort
包提供了接口按照需要的排序规则实现其中的方法就好了。
比如你题目说的需要按照时间的先后顺序来排序,那么
Less
方法的实现,就是用对象的Time
字段来比较大小。如下是一个Demo,按照人的年龄来排序。
参考java treemap, map 的节点包含一个指针, 将所有元素有序串起来