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语言使用select{}阻塞main函数介绍
Apr 25 Golang
用golang如何替换某个文件中的字符串
Apr 25 Golang
go语言中json数据的读取和写出操作
Apr 28 Golang
golang goroutine顺序输出方式
Apr 29 Golang
解决Golang中goroutine执行速度的问题
May 02 Golang
golang gopm get -g -v 无法获取第三方库的解决方案
May 05 Golang
Go语言基础map用法及示例详解
Nov 17 Golang
golang语言指针操作
Apr 14 Golang
Golang ort 中的sortInts 方法
Apr 24 Golang
Golang 实现WebSockets
Apr 24 Golang
Go调用Rust方法及外部函数接口前置
Jun 14 Golang
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
Jun 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
PHP-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
jQuery实现简单的日期输入格式化控件
2015/03/12 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
python通过yield实现数组全排列的方法
2015/03/18 Python
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
python处理xml文件的方法小结
2017/05/02 Python
python opencv读mp4视频的实例
2018/12/07 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
什么是类的返射机制
2016/02/06 面试题
医学求职信
2014/05/28 职场文书
伦敦奥运会口号
2014/06/13 职场文书
网络管理员岗位职责
2015/02/12 职场文书
团员年度个人总结
2015/02/26 职场文书
追悼会家属答谢词
2015/09/29 职场文书
《称赞》教学反思
2016/02/17 职场文书
创业计划书详解
2019/07/19 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android