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:垃圾回收GC触发条件详解
Apr 24 Golang
golang中实现给gif、png、jpeg图片添加文字水印
Apr 26 Golang
golang import自定义包方式
Apr 29 Golang
Go使用协程交替打印字符
Apr 29 Golang
go设置多个GOPATH的方式
May 05 Golang
Golang全局变量加锁的问题解决
May 08 Golang
go web 预防跨站脚本的实现方式
Jun 11 Golang
简单聊聊Golang中defer预计算参数
Mar 25 Golang
Go并发4种方法简明讲解
Apr 06 Golang
Golang 结构体数据集合
Apr 22 Golang
Golang并发工具Singleflight
May 06 Golang
Go语言入门exec的基本使用
May 20 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 动态多文件上传
2009/01/18 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
Python itertools模块详解
2015/05/09 Python
PyQt实现界面翻转切换效果
2018/04/20 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
python logging 日志的级别调整方式
2020/02/21 Python
Django admin组件的使用
2020/10/24 Python
浅谈盘点5种基于Python生成的个性化语音方法
2021/02/05 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
老教师工作总结的自我评价
2013/09/27 职场文书
大学自主招生自荐信
2013/12/16 职场文书
《珍珠泉》教学反思
2014/02/20 职场文书
表彰大会主持词
2014/03/26 职场文书
小学安全汇报材料
2014/08/14 职场文书
关于长城的导游词
2015/01/30 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android