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如何去除多余空白字符(含制表符)
Apr 25 Golang
golang import自定义包方式
Apr 29 Golang
解决golang结构体tag编译错误的问题
May 02 Golang
goland设置颜色和字体的操作
May 05 Golang
go mod 安装依赖 unkown revision问题的解决方案
May 06 Golang
Go语言实现Snowflake雪花算法
Jun 08 Golang
K8s部署发布Golang应用程序的实现方法
Jul 16 Golang
Golang中channel的原理解读(推荐)
Oct 16 Golang
浅谈GO中的Channel以及死锁的造成
Mar 18 Golang
Golang bufio详细讲解
Apr 21 Golang
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
Jun 21 Golang
Go微服务项目配置文件的定义和读取示例详解
Jun 21 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中var_dump方法的使用详解
2013/06/24 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
Laravel5.4框架中视图共享数据的方法详解
2019/09/05 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
分享别人写的一个小型js框架
2007/08/13 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
python创建和使用字典实例详解
2013/11/01 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
在python中实现强制关闭线程的示例
2019/01/22 Python
python判断无向图环是否存在的示例
2019/11/22 Python
澳大利亚最早和最古老的巨型游戏专家:Yardgames
2020/02/20 全球购物
实习生体会的自我评价范文
2013/11/28 职场文书
军校本科大学生自我评价
2014/01/14 职场文书
仓库文员岗位职责
2014/04/06 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
判断Python中的Nonetype类型
2021/05/25 Python