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协程池模拟实现群发邮件功能
May 02 Golang
Golang之sync.Pool使用详解
May 06 Golang
解决Goland 同一个package中函数互相调用的问题
May 06 Golang
go web 预防跨站脚本的实现方式
Jun 11 Golang
Go中的条件语句Switch示例详解
Aug 23 Golang
深入理解go缓存库freecache的使用
Feb 15 Golang
golang操作rocketmq的示例代码
Apr 06 Golang
Golang 链表的学习和使用
Apr 19 Golang
Golang 遍历二叉树
Apr 19 Golang
Golang解析JSON对象
Apr 30 Golang
Golang gRPC HTTP协议转换示例
Jun 16 Golang
Go语言怎么使用变长参数函数
Jul 15 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 图片水印类代码
2012/08/27 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
jquery 禁止鼠标右键并监听右键事件
2017/04/27 jQuery
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
python迭代器实例简析
2014/09/25 Python
python构建深度神经网络(DNN)
2018/03/10 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
python十进制转二进制的详解
2020/02/07 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
用python对oracle进行简单性能测试
2020/12/05 Python
python math模块的基本使用教程
2021/01/16 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
linux面试题参考答案(9)
2016/01/29 面试题
人事专员的岗位职责
2014/03/01 职场文书
学校消防安全责任书
2014/07/23 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
道德与公民自我评价
2015/03/09 职场文书
结婚主持人致辞
2015/07/28 职场文书