自学内容网 自学内容网

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

原文地址:https://blog.csdn.net/qq_36574108/article/details/143399308

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!