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 相关文章推荐
Go各时间字符串使用解析
Apr 02 Golang
go原生库的中bytes.Buffer用法
Apr 25 Golang
goland设置颜色和字体的操作
May 05 Golang
go类型转换及与C的类型转换方式
May 05 Golang
golang 实现时间戳和时间的转化
May 07 Golang
详解Golang如何优雅的终止一个服务
Mar 21 Golang
Golang获取List列表元素的四种方式
Apr 20 Golang
Go web入门Go pongo2模板引擎
May 20 Golang
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
Jun 14 Golang
Go语言测试库testify使用学习
Jul 23 Golang
基于Python实现西西成语接龙小助手
Aug 05 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 ios推送(代码)
2013/07/01 PHP
php判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
php上传文件常见问题总结
2015/02/03 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
select组合框option的捕捉实例代码
2008/09/30 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
通过button将form表单的数据提交到action层的实例
2017/09/08 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
FFrpc python客户端lib使用解析
2019/08/24 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
大学新生军训个人的自我评价
2013/10/03 职场文书
2014年幼儿园元旦活动方案
2014/02/13 职场文书
四年级学生评语大全
2014/04/21 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
颐和园导游词
2015/01/30 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
电影圆明园观后感
2015/06/03 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
MySQL优化及索引解析
2022/03/17 MySQL
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android
正则表达式基础与常用验证表达式
2022/06/16 Javascript