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 如何用反射reflect操作结构体
Apr 28 Golang
浅谈Golang 嵌套 interface 的赋值问题
Apr 29 Golang
对Golang中的FORM相关字段理解
May 02 Golang
解决Goland 同一个package中函数互相调用的问题
May 06 Golang
Goland使用Go Modules创建/管理项目的操作
May 06 Golang
详解Go语言Slice作为函数参数的使用
Jul 02 Golang
golang fmt格式“占位符”的实例用法详解
Jul 04 Golang
golang实现一个简单的websocket聊天室功能
Oct 05 Golang
Go语言的协程上下文的几个方法和用法
Apr 11 Golang
Golang MatrixOne使用介绍和汇编语法
Apr 19 Golang
Golang 对es的操作实例
Apr 20 Golang
Python测试框架pytest核心库pluggy详解
Aug 05 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 IN_ARRAY 函数使用注意事项
2010/07/24 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
php时间戳转换代码详解
2019/08/04 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
jquery div 居中技巧应用介绍
2012/11/24 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
js简单实现点击左右运动的方法
2015/04/10 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
2016/06/23 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
js实现小星星游戏
2020/03/23 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
django 自定义过滤器的实现
2019/02/26 Python
Python如何实现的二分查找算法
2020/05/27 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
浅谈Python中的继承
2020/06/19 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
UGG英国官方网站:UGG UK
2018/02/08 全球购物
法律专业求职信
2014/05/24 职场文书
孔子观后感
2015/06/08 职场文书
公司出差管理制度范本
2015/08/05 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书