golang有序map

最近使用go开发排行榜的需求, 有些情况会用到有序map, 但是go竟然没有有序map的实现

本着自己动手丰衣足食的原则, 就自己实现了一个

原理

原理比较简单, 主要结合了container/list双向链表和map

使用双向链表存储key和value, 保证顺序, 使用map存储key和节点信息, 保证查找的时间复杂度

在增加, 删除, 修改, 查询时保证了O(1)的复杂了, 感兴趣的同学可以查看源码, 多多给出更多优化意见

安装

go 复制代码
go get -u github.com/shuaibingn/go-extension/ordered_map

使用

go 复制代码
```go
package main

import (
	"fmt"
	
	"github.com/shuaibingn/go-extension/ordered_map"
)

func main() {
	om := ordered_map.NewOrderedMap[string, string]() // 初始化有序map
	om.Set("key1", "value1") // 设置key, value
	om.Set("key2", "value2")
	om.Set("key3", "value3")
	
	value, ok := om.Get("key1") // 获取key1的值
    fmt.Println(value, ok)
	
	om.Remove("key2") // 删除key2
	
	keys := om.Keys() // 获取所有的key
	fmt.Println(keys)
	
	values := om.Values() // 获取所有的value
	fmt.Println(values)
	
	// 有序map遍历
	for item := range om.Iterator() {
		fmt.Println(item.Key, item.Value)
    }
	
	om.Clear() // 清空有序map
	fmt.Println(om.Len()) // 获取有序map的长度
}
复制代码
相关推荐
工具派2 分钟前
Word文档太大怎么拆分?段落结构与两种拆法的边界实测
开发语言·c#·word
卷无止境5 分钟前
WebGIS生态全景丨从浏览器里的地图到背后的空间数据库
后端·python
wjcroom18 分钟前
实现老型号HP打印机手机无线打印的一些步骤和方法
开发语言·智能手机·php
JuiceFS20 分钟前
JuiceFS 企业版 5.4:从千亿文件到百万客户端
后端
潜龙952720 分钟前
需求文档一键变测试用例:手工用例智能生成平台
开发语言·c#
Lost of 程序猿22 分钟前
命令模式实战:把“下单后的动作“打包成可执行的任务
后端·设计模式·c#·asp.net·命令模式
sunburn-24 分钟前
Java 排序算法详细教学:从冒泡排序到快速排序
java·开发语言·数据结构·ide·算法
焦玉全26 分钟前
Sharding-JDBC 分库分表实战:从 800 万订单表的查询优化说起
后端
王中阳Go27 分钟前
面试官问"你怎么证明它有效",200个转AI的后端没几个答得上来
人工智能·后端·面试
鹤卿12327 分钟前
「iOS」GCD
开发语言·ios·objective-c