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中semaphore(信号量)源码
Apr 03 Golang
Golang二维切片初始化的实现
Apr 08 Golang
go语言中json数据的读取和写出操作
Apr 28 Golang
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
Golang 使用Map实现去重与set的功能操作
Apr 29 Golang
解决goland 导入项目后import里的包报红问题
May 06 Golang
go xorm框架的使用
May 22 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
深入理解go缓存库freecache的使用
Feb 15 Golang
golang生成vcf通讯录格式文件详情
Mar 25 Golang
GoFrame基于性能测试得知grpool使用场景
Jun 21 Golang
Go gorilla/sessions库安装使用
Aug 14 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
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
Python创建日历实例
2014/08/21 Python
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
在Python中使用列表生成式的教程
2015/04/27 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
Chain Reaction Cycles俄罗斯:世界上最大的在线自行车商店
2019/08/27 全球购物
网上快餐厅创业计划书
2014/02/01 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
教师个人培训总结
2015/02/11 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python