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 21 Golang
golang在GRPC中设置client的超时时间
Apr 27 Golang
golang通过递归遍历生成树状结构的操作
Apr 28 Golang
彻底理解golang中什么是nil
Apr 29 Golang
Go使用协程交替打印字符
Apr 29 Golang
Go语言 go程释放操作(退出/销毁)
Apr 30 Golang
go 实现简易端口扫描的示例
May 22 Golang
Golang二维数组的使用方式
May 28 Golang
golang生成vcf通讯录格式文件详情
Mar 25 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
GO语言字符串处理函数之处理Strings包
Apr 14 Golang
Go web入门Go pongo2模板引擎
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/07 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
PHP中16个高危函数整理
2019/09/19 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
一个js控制的导航菜单实例代码
2013/12/03 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
Python3基础之输入和输出实例分析
2014/08/18 Python
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
python能做哪方面的工作
2020/06/15 Python
python和JavaScript哪个容易上手
2020/06/23 Python
高考考python编程是真的吗
2020/07/20 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
大家访活动实施方案
2014/03/10 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
学习教师法的心得体会
2014/09/03 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
微信早安问候语
2015/11/10 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL