Go有序map:orderedmap

有序映射

与传统的无序映射(Map)不同,orderedmap包中的有序映射(OrderedMap)可以记录键值对的插入顺序。orderedmap提供了一些有用的API,用来存储、删除、查询和遍历键值对。

获取OrderedMap

你可以通过OrderedMap在github上的地址来访问OrderedMap。或者通过下面的方式手动获取:

git clone https://github.com/liushuochen/orderedmap.git

API

创建一个有序映射实例

使用orderedmap.New函数来创建一个有序映射实例:

package main

import (
    "fmt"
    "github.com/liushuochen/orderedmap"
)

func main() {
    o := orderedmap.New()
    fmt.Printf("%T", o)
    // output: *orderedmap.OrderedMap
}

存储数据

使用OrderedMap实例的Store方法来存储一个数据。OrderedMap依据数据的插入顺序来存放数据。Store方法接收两个interface{}类型的参数key和value,分别表示有序映射的键和值。

下面是Store方法的签名:

func (om *OrderedMap) Store(key, value interface{})

package main

import (
    "fmt"
    "github.com/liushuochen/orderedmap"
)

func main() {
    o := orderedmap.New()
    o.Store("name", "Pizza")
    o.Store("price", 50)
    o.Store("size", "10#")
    fmt.Println(o)
    // output: {name: Piza price: 50 size: 10#}
}

读取数据

使用OrderedMap实例的Load方法来获取某个key对应的value。如果指定的key在映射中不存在,Load方法返回一个nil和一个标记false。下面是Load方法的签名:

func (om *OrderedMap) Load(key interface{}) (interface{}, bool)

对于存在的key,Load方法返回映射中key对应的value和一个标记为true的bool值:

package main

import (
    "fmt"
    "github.com/liushuochen/orderedmap"
)

func main() {
    o := orderedmap.New()
    o.Store("name", "Pizza")
    o.Store("price", 50)
    o.Store("size", "10#")

    size, ok := o.Load("size")
    fmt.Println(size, ok)
    // output: 10# true

    color, ok := o.Load("color")
    fmt.Println(color, ok)
    // output: <nil> false
}

删除数据

使用OrderedMap实例的Delete方法来删除指定的键值对。如果指定要删除的key在Map中不存在,Delete方法不会做任何事。Delete方法会线性的查找要删除的Key,因此时间复杂度是

func (om *OrderedMap) Delete(key interface{})

下面是代码示例:

package main

import (
    "fmt"
    "github.com/liushuochen/orderedmap"
)


func main() {
    o := orderedmap.New()
    o.Store("name", "Pizza")
    o.Store("price", 50)
    o.Store("size", "10#")
    fmt.Println("Before using delete method, the content of orderedmap is: ", o)
    // Before using delete method, the content of orderedmap is:  {name: Pizza price: 50 size: 10#}

    o.Delete("size")
    fmt.Println("After using delete method, the content of orderedmap is: ", o)
    // After using delete method, the content of orderedmap is:  {name: Pizza price: 50}
}

遍历

Range方法可以遍历OrderedMap的每一个键值对(但不能遍历嵌套的结构)。Range方法的参数是一个函数f:

f func(key, value interface{}) bool

如果函数f的返回结果为false,那么遍历终止。

Range方法的签名如下:

func (om *OrderedMap) Range(f func(key, value interface{}) bool)

下面的例子演示了遍历OrderedMap中的每一个键值对,并将Key和Value打印:

package main

import (
    "fmt"
    "github.com/liushuochen/orderedmap"
)

func main() {
    o := orderedmap.New()
    o.Store("A", "a")
    o.Store("B", "b")

    f := func(key, value interface{}) bool {
        fmt.Printf("key: %v, value: %v\n", key, value)
        return true
    }

    o.Range(f)
    // outputs:
    // key: A, value: a
    // key: B, value: b
}

获取长度

使用Length方法来获取OrderedMap实例的长度,即键值对数量(不包含嵌套的键值对)。

func (om *OrderedMap) Length() int

下面的例子是在给OrderedMap实例添加了两个元素后,然后计算其长度:

package main

import (
    "fmt"
    "github.com/liushuochen/orderedmap"
)

func main() {
    o := orderedmap.New()
    o.Store("A", "a")
    o.Store("B", "b")

    fmt.Println(o.Length())
    // output: 2
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/18010.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

编译安装最新的Linux系统内核

现在还有不少机器是CentOS8 Stream系统&#xff0c;虽然上了贼船&#xff0c;不影响用就是了。8的编译和7大同小异&#xff0c;只是踩了更多的坑在这里记录一下&#xff0c;或许会帮到看到的朋友。 安装编译环境 CentOS8安装必要的包 yum groupinstall "Development Too…

2022年NOC大赛编程马拉松赛道复赛图形化高年级A卷-正式卷,包含答案

目录 单选题: 多选题: 编程题: 下载打印文档做题: 2022年NOC大赛编程马拉松赛道复赛图形化高年级A卷-正式卷,包含答案 单选题:<

《Netty》从零开始学netty源码(五十三)之PoolThreadCache的功能

allocateNormal 在前面分析PoolArena的分配内存的方法中&#xff0c;每次分配都是先从本地线程缓存中分配&#xff0c;本地线程缓存PoolThreadCache的分配方法如下&#xff1a; 分配过程主要有两步&#xff1a; 从PoolThreadCache的缓存数组中获取相应大小的缓存cache将需要…

桌面虚拟化的优势

启用基于云的虚拟桌面基础架构 &#xff08;VDI&#xff09; OpenText™ Exceed TurboX™ &#xff08;ETX&#xff09; 长期以来一直是虚拟化在 Linux 主机上运行的图形要求苛刻的软件的黄金标准。ETX 最新版本&#xff08;12.5&#xff09;增加了许多Microsoft Windows功能&…

智能座舱的“宏大蓝图”和“残酷现实”

配图来自Canva可画 2023年上海车展各大车企发布新车、新配置和新战略好不热闹&#xff0c;“智能驾驶”、“智能座舱”等关键词频频出现&#xff0c;智能化已然成为车企技术比拼的关键。 Unity中国发布最新智能座舱解决方案&#xff0c;可为车企提供成熟、可量产落地的HMI&…

什么是点对点传输?什么是点对多传输

点对点技术&#xff08;peer-to-peer&#xff0c; 简称P2P&#xff09;又称对等互联网络技术&#xff0c;是一种网络新技术&#xff0c;依赖网络中参与者的计算能力和带宽&#xff0c;而不是把依赖都聚集在较少的几台服务器上。P2P网络通常用于通过Ad Hoc连接来连接节点。这类网…

深度学习 - 46.DIN 深度兴趣网络

目录 一.引言 二.摘要 ABSTRACT 三.介绍 INTRODUCTION 1.CTR 在广告系统的作用 2.传统 MLP 存在的问题 3.DIN 的改进 四.近期工作 RELATEDWORK 1.传统推荐算法 2.用户行为抽取 五.背景 BACKGROUD 六.深度兴趣网络 DEEP INTEREST NETWORK 1.特征表示 Feature Repres…

triton 疑难手册

config.pbtxt 配置参数手册 backend或platform参数用于指示nvidia triton用对应的backend加载模型参数,它的使用示例如下: name: "xxx" platform: "pytorch_libtorch"max_batch_size: 8 input [ {name: "input0"data_type: TYPE_UINT8dims: …

ansible常用命令

目录 1、列出默认清单文件中的所有受管主机 2. 列出自定义清单文件中的所有受管主机&#xff08;自定义清单文件&#xff1a;inventory&#xff09; 3、运行playbook 4、创建需要输入文件密码的加密的文件 5、创建用密码文件的加密的文件 6、查看加密的文件内容 7、向已有…

助力工业物联网,工业大数据之ODS层构建:申明分区代码及测试【十】

文章目录 知识点13&#xff1a;ODS层构建&#xff1a;申明分区代码及测试知识点14&#xff1a;ODS层与DWD层区别知识点15&#xff1a;DWD层构建&#xff1a;需求分析知识点16&#xff1a;DWD层构建&#xff1a;建库实现测试知识点17&#xff1a;DWD层构建&#xff1a;建表实现测…

【NLP开发】Python实现聊天机器人(ChatterBot,集成web服务)

&#x1f37a;NLP开发系列相关文章编写如下&#x1f37a;&#xff1a; &#x1f388;【NLP开发】Python实现词云图&#x1f388;&#x1f388;【NLP开发】Python实现图片文字识别&#x1f388;&#x1f388;【NLP开发】Python实现中文、英文分词&#x1f388;&#x1f388;【N…

Ubuntu搭建VPN服务

PPTD协议 此协议据说安全级别不高&#xff0c;苹果系统已经不支持&#xff0c;但windows依然支持 1.安装,root账号登录服务器 apt-get update apt-get install pptpd 2.配置主机ip及连接主机的设备所分配ip池,客户端分配的内网ip段。 vim /etc/pptpd.conf 将以下两行注释去…

【计算机视觉】最强 Zero-Shot 视觉应用:Grounding DINO + Segment Anything + Stable Diffusion

文章目录 一、前言二、功能介绍2.1 功能一2.2 功能二2.3 其他有趣的功能 三、总结 一、前言 用 Midjourney 花一个小时做的项目 logo 图&#xff1a; 解释一下 logo 的含义&#xff1a;一只坐在地上的马赛克风格的熊。 坐在地面上是因为 ground 有地面的含义&#xff0c;然后分…

redi缓存使用

1、缓存的特征 第一个特征&#xff1a;在一个层次化的系统中&#xff0c;缓存一定是一个快速子系统&#xff0c;数据存在缓存中时&#xff0c;能避免每次从慢速子系统中存取数据。 第二个特征&#xff1a;缓存系统的容量大小总是小于后端慢速系统的&#xff0c;不可能把所有数…

R实践——paleobioDB详解(paleobiology database)

paleobioDB详解&#xff08;paleobiology database&#xff09; PBDB初步认识paleobioDB一个简单的例子 所有函数详解1. pbdb_collection描述用法参数细节值例子 2. pbdb_collections描述用法参数值例子 3. pbdb_collections_geo描述用法参数值例子 4. pbdb_interval描述用法参…

Oracle 体系结构

文章目录 Oracle体系结构Oracle的内存结构Oracle的进程结构服务器进程后台进程可选后台进程 物理存储结构逻辑存储结构 概念&#xff1a; Oracle server由Oracle instance和Oracle database组成&#xff0c;Oracle instance由后台进程和共享内存组成&#xff0c;Oracle的实例包…

层次分析法及找工作问题实战

学习知识要实时简单回顾&#xff0c;我把学习的层次分析法简单梳理一下&#xff0c;方便入门与复习。 AHP 层次分析法&#xff08;Analytic Hierarchy Process&#xff0c;简称 AHP&#xff09;是对一些较为复杂、较为模糊的问题作出决策的简易方法&#xff0c;它特别适用于那…

认识监听器(Listener)

监听器是什么&#xff1f; 监听器&#xff08;Listener&#xff09;是一种运行在后台的程序&#xff0c;它主要用于监控某些事件在系统中的发生&#xff0c;并且根据这些事件做一些特定的处理。在Web应用程序中&#xff0c;监听器可以观察ServletContext、HttpSession以及Serv…

vue项目为例解决element ui 时间选择器 picker使用样式穿透不起作用问题

今天在开发中 需要修改时间选择器弹出的这个组件的样式 但这个东西比较坑爹 首先 不能影响其他组件 就是其他组件用了时间选择器 不能受到我们写的样式的影响 那么 就只好穿透了 但你会发现 这东西是作用与body下的 就很坑 穿透我试了挺久的 不起作用 但官方文档有提供给我们一…

体验 gpt4free

体验 gpt4free 什么是 gpt4free效果演示安装 ffmpeg启动 gpt4free访问 gpt4free gui其他 什么是 gpt4free GPT4Free 是一个由 xtekky 创建的基于 OpenAI GPT-4 和 GPT-3.5 的 API。它可以向用户提供类似于 OpenAI GPT-3 的功能&#xff0c;如文本生成、问答、翻译等。 GPT4Fre…