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的长度
}
复制代码
相关推荐
前路不黑暗@14 分钟前
C语言:操作符详解(二)
c语言·开发语言·经验分享·笔记·学习·学习方法·visual studio
他日若遂凌云志1 小时前
深入剖析 Fantasy 框架的消息设计与序列化机制:协同架构下的高效转换与场景适配
后端
深盾科技1 小时前
Kotlin Data Classes 快速上手
android·开发语言·kotlin
快手技术1 小时前
快手Klear-Reasoner登顶8B模型榜首,GPPO算法双效强化稳定性与探索能力!
后端
二闹1 小时前
三个注解,到底该用哪一个?别再傻傻分不清了!
后端
zzywxc7871 小时前
详细探讨AI在金融、医疗、教育和制造业四大领域的具体落地案例,并通过代码、流程图、Prompt示例和图表等方式展示这些应用的实际效果。
开发语言·javascript·人工智能·深度学习·金融·prompt·流程图
用户49055816081251 小时前
当控制面更新一条 ACL 规则时,如何更新给数据面
后端
林太白1 小时前
Nuxt.js搭建一个官网如何简单
前端·javascript·后端
码事漫谈1 小时前
VS Code 终端完全指南
后端
浮灯Foden2 小时前
算法-每日一题(DAY13)两数之和
开发语言·数据结构·c++·算法·leetcode·面试·散列表