golang 实现对Map进行键值自定义排序


Posted in Golang onApril 28, 2021

看代码吧~

//自定义结构体,用来自定义排序
type RecentlyUpdateListMapSorter []map[string]interface{}
//根据MapSorter.Keys进行倒序排序
func (ms *RecentlyUpdateListMapSorter) SortReverse() {
 sort.Sort(sort.Reverse(ms))
}
//自定义排序方法(Len(),Less(),Swap())
func (ms *RecentlyUpdateListMapSorter) Len() int {
 return len(*ms)
}
func (ms *RecentlyUpdateListMapSorter) Less(i, j int) bool {
 t1, _ := time.Parse(timex.Layout_Normal, core.ToString((*ms)[i]["UpdateTime"]))
 t2, _ := time.Parse(timex.Layout_Normal, core.ToString((*ms)[j]["UpdateTime"]))
 return t1.Before(t2)
}
func (ms *RecentlyUpdateListMapSorter) Swap(i, j int) {
 (*ms)[i], (*ms)[j] = (*ms)[j], (*ms)[i]
}

补充:golang中map声明及初始化

1 map简介

map是一堆键值对的未排序集合,类似Python中字典的概念,它的格式为map[keyType]valueType,是一个key-value的hash结构。

map的读取和设置也类似slice一样,通过key来操作,只是slice的index只能是int类型,而map多了很多类型,可以是int,可以是string及所有完全定义了==与!=操作的类型。

在C++/Java中,map一般都以库的方式提供,比如在C++中是STL的std::map<>,在Java中是Hashmap<>,在这些语言中,如果要使用map,事先要引用相应的库。而在Go中,使用map不需要引入任何库,并且用起来也更加方便。

2 map声明

声明map的语法如下

var map变量名 map[key] value

其中:key为键类型,value为值类型

例如:value不仅可以是标注数据类型,也可以是自定义数据类型

var numbers map[string] int
var myMap map[string] personInfo
    personInfo为自定义结构体,存储个人信息,定义如下
type personInfo struct {<!-- -->
    ID string
    Name string
    Address string
}

3 map初始化

3.1 直接初始化(创建)

rating := map[string] float32 {"C":5, "Go":4.5, "Python":4.5, "C++":2 }
myMap := map[string] personInfo{"1234": personInfo{"1", "Jack", "Room 101,..."},}
var m1 map[string]int=map[sting]int{"key":0}

3.2 通过make初始化(创建)

Go语言提供的内置函数make()可以用于灵活地创建map。

创建了一个键类型为string,值类型为int的map

numbers := make(map[string] int)

创建了一个键类型为string,值类型为personInfo的map

myMap = make(map[string] personInfo)

也可以选择是否在创建时指定该map的初始存储能力,如创建了一个初始存储能力为5的map

myMap = make(map[string] personInfo, 5)

创建后初始化如下:

numbers["one"] = 1 
myMap["1234"] = personInfo{"1", "Jack", "Room 101,..."}

4 map元素查找

在Go语言中,map的查找功能设计得比较精巧。判断是否成功找到特定的键,不需要检查取到的值是否为nil,只需查看第二个返回值。要从map中查找一个特定的键,可以通过下面的代码来实现:

value, ok := myMap["1234"]
if ok{
    //处理找到的value
}

5 map元素修改(赋值)

5.1 直接修改

numbers["one"] = 11

5.2 间接修改

map是一种引用类型,如果两个map同时指向一个底层,那么一个改变,另一个也相应的改变。

numbersTest := numbers
numbersTest["one"] = "111"

现在numbers["one"]的值变为"111"了。

6 map元素删除

Go语言提供了一个内置函数delete(),用于删除容器内的元素。如

delete(number, "one")

上面的代码将从myMap中删除键为“one”的键值对。如果“one”这个键不存在,那么这个调用将什么都不发生,也不会有什么副作用。但是如果传入的map变量的值是nil,该调用将导致程序抛出异常(panic)。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
Golang 实现超大文件读取的两种方法
Apr 27 Golang
golang http使用踩过的坑与填坑指南
Apr 27 Golang
golang 如何用反射reflect操作结构体
Apr 28 Golang
golang import自定义包方式
Apr 29 Golang
解决Go gorm踩过的坑
Apr 30 Golang
Go标准容器之Ring的使用说明
May 05 Golang
go select编译期的优化处理逻辑使用场景分析
Jun 28 Golang
入门学习Go的基本语法
Jul 07 Golang
一文搞懂Golang 时间和日期相关函数
Dec 06 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 Golang
Golang 遍历二叉树
Apr 19 Golang
Go gRPC进阶教程gRPC转换HTTP
Jun 16 Golang
go语言中json数据的读取和写出操作
Apr 28 #Golang
golang 实现菜单树的生成方式
Apr 28 #Golang
golang通过递归遍历生成树状结构的操作
Apr 28 #Golang
goland 恢复已更改文件的操作
goland 清除所有的默认设置操作
go 原生http web 服务跨域restful api的写法介绍
Apr 27 #Golang
解决Golang中ResponseWriter的一个坑
Apr 27 #Golang
You might like
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
用JS写的一个TableView控件代码
2010/01/23 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
关于vue.js组件数据流的问题
2017/07/26 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
python处理大数字的方法
2015/05/27 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
美国著名手表网站:Timepiece
2017/11/15 全球购物
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
上海方立数码笔试题
2013/10/18 面试题
管理学专业个人求职信范文
2013/09/21 职场文书
播音主持专业个人自我评价
2014/01/09 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
副总经理任命书
2014/06/05 职场文书
市场营销专业自荐书
2014/06/10 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
海底两万里读书笔记
2015/06/26 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书