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 26 Golang
Go语言带缓冲的通道实现
Apr 26 Golang
goland 清除所有的默认设置操作
Apr 28 Golang
go语言中json数据的读取和写出操作
Apr 28 Golang
golang 实现对Map进行键值自定义排序
Apr 28 Golang
彻底理解golang中什么是nil
Apr 29 Golang
goland 设置project gopath的操作
May 06 Golang
关于golang高并发的实现与注意事项说明
May 08 Golang
golang 实用库gotable的具体使用
Jul 01 Golang
golang fmt格式“占位符”的实例用法详解
Jul 04 Golang
Go语言grpc和protobuf
Apr 13 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+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
php截取字符串函数分享
2015/02/02 PHP
php实现留言板功能
2017/03/05 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
2017/08/28 PHP
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
信息滚动效果的实例讲解
2017/09/18 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
python备份文件的脚本
2008/08/11 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
护士实习鉴定范文
2013/12/22 职场文书
品德评语大全
2014/05/05 职场文书
实习生工作证明范本
2014/09/14 职场文书
保送生自荐信范文
2015/03/26 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL
MySQL分区表管理命令汇总
2022/03/21 MySQL