当前位置: 首页 > article >正文

golang有序map

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

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

原理

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

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

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

安装

go get -u github.com/shuaibingn/go-extension/ordered_map

使用

```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的长度
}

http://www.kler.cn/a/377508.html

相关文章:

  • #渗透测试#SRC漏洞挖掘# 操作系统-windows系统bat病毒
  • 【RK3588 Linux 5.x 内核编程】-GPIO设备驱动与点亮LED
  • VIM使用笔记
  • python NLTK快速入门
  • k8s 查看cpu使用率最高的pod
  • 鸿蒙进阶-AlphabetIndexer组件
  • vue3 + ts + element-plus 二次封装 el-table
  • ✨ Midjourney中文版:创意启航,绘梦无界 ✨
  • Harmony NEXT - AlphabetIndexer实现联系人字母索引
  • 密码学简介
  • Python入门:如何掌控多线程数量
  • 【OD-支持在线评测】智能驾驶(200分)
  • 无人机之自动控制原理篇
  • oracle-函数-NULLIF (expr1, expr2)的妙用
  • Vuestic 数据表格 使用demo
  • HTML前端页面设计静态网站
  • [NOIP2008 普及组] 排座椅
  • 【Redis:原理、架构与应用】
  • 中阳量化交易模型的探索与发展:科技引领金融未来
  • 东方娱乐周刊
  • 注册页面设计(表单基础)
  • 【机器学习】机器学习与成像技术:开启智能视觉的新篇章
  • Zypher Research:服务器抽象叙事,GameFi 赛道的下一个热点?
  • openssl-ecparam 命令手册
  • LeetCode (206单链表反转)
  • React + Vite + TypeScript + React router项目搭建教程