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的长度
}
复制代码
相关推荐
万法若空1 分钟前
【算法-查找】查找算法
java·数据结构·算法
葫芦和十三7 分钟前
图解 MongoDB 30|查询路由与广播查询:带片键定向,不带就广播
后端·mongodb·agent
葫芦和十三15 分钟前
图解 MongoDB 29|分片键陷阱:jumbo chunk、孤儿文档和写入热点
后端·mongodb·agent
殳翰23 分钟前
下服务器端开发流程及相关工具介绍(C++)
开发语言·c++
进击的程序猿~30 分钟前
Go Zero源码阅读1
后端·golang
落寞的星星1 小时前
这个对象就包含了已经转换好的DFA和各种词法分析器运转所需要的参数。下一步,我们就可以用ScannerInfo对象创建出Scanner对象,请看下面的代码:
开发语言·c#
nothing&nowhere1 小时前
用 Python 做问卷数据清洗:无效样本检测与处理实战
开发语言·python·数据清洗·数据处理·问卷星·问卷星脚本·刷问卷
2601_961593422 小时前
Rust 开发环境配置繁琐?RustRover 开箱即用搞定编码调试
开发语言·后端·macos·rust
HZZD_HZZD2 小时前
DL/T 645-2026新国标深度解读与智能电表协议适配实战:从帧结构变化到Java采集器升级的全链路改造方案
java·开发语言
犀利豆4 小时前
AI in Harness(三)
人工智能·后端