【Go语言】Go语言中的字典

Go语言中的字典

字典就是存储键值对映射关系的集合,在Go语言中,需要在声明时指定键和值的类型,此外Go语言中的字典是个无序集合,底层不会按照元素添加顺序维护元素的存储顺序。

如下所示,Go语言中字典的简单示例:

func DictExample() {
	var tempMap map[string]int
	tempMap = map[string]int{
		"one":   1,
		"two":   2,
		"three": 3,
	}

	k := "two"
	v, ok := tempMap[k]
	// ok,如果key存在,则ok为true,否则ok为false
	if ok {
		fmt.Printf("the element of key %q:%d", k, v)
	} else {
		fmt.Println("Not found!")
	}
}

1 字典声明

字典的声明基本上没有多余的元素,例如:

var tempMap map[string]int
// tempMap:声明的字典变量名
// string:字典键的类型
// int:字典值的类型

2 字典初始化

Go语言中,可以先声明再初始化变量,也可以通过 := 将字典的声明和初始化合并为一条语句:

testMap := map[string]int{
    "one":   1,
    "two":   2,
    "three": 3,
}

打印字典testMap,发现其并没有按照存储的顺序进行打印,这是因为Go语言中字典是个无序集合。

在Go语言中,字典的初始化通常要和初始化在一起进行,如果分开了出现编译的报错,如下所示:

var tempMap map[string]int
tempMap["one"] = 1

如果需要初始化一个空的字典,需要使用Go语言内置的 make() 函数:

var tempMap = make(map[string]int)
tempMap["one"] = 1

还可以通过 make() 函数的第二个参数选择是否在创建的时候指定该字典的初始化存储容量(超出会自动扩容):

testMap = make(map[string]int, 100)

3 元素赋值

字典的赋值指定键值对即可,如下所示:

testMap["one"] = 1

注:字典初始化之后才能进行赋值操作,如果仅仅是声明,此时字典的值为 nil, 在nil 上进行操作,编译时会报panic,导致编译不通过。

4 查找元素

Go语言中,通过如下的代码查找特定的键值对:

value, ok := testMap["one"]
if ok {
    // 字典中存储键"one"对应的值
}
// 如上代码,value是真正返回的键值,ok是是否在字典中找到key对应值的标识,这是一个布尔值,如果查找成功,返回true,否则返回false

5 删除元素

Go语言中,使用delete() 用于删除容器内的元素,也能够用来删除字典元素,如下所示:

delete(testMap,"one")

执行删除时,如果“one”不存在或者字典尚未进行初始化,也不会产生报错。

6 遍历元素

Go语言中,可以像遍历数组一样对字典进行遍历,如下所示:

testMap := map[string]int{
    "one":1,
    "two":2,
    "three":3
}

for key,value := range testMap {
    fmt.Println(key, value)
}

也可以使用匿名变量,只获取字典的值:

for _,value := range testMap {
    fmt.Println( value)
}

或者只获取字典的键:

for key := range testMap {
    fmt.Println(key)
}

7 键值对调

testMap := map[string]int{
    "one":   1,
    "two":   2,
    "three": 3,
}

newMap := make(map[int]string)

for k, v := range testMap {
    newMap[v] = k
}

for k, v := range newMap {
    fmt.Println(k, v)
}

8 字典排序

Go语言中的字典是个无序集合,如果想要对字典进行排序,可以通过分别为字典的键或值创建切片,然后通过对切片进行排序实现。

按照键进行排序:

testMap := map[string]int{
    "one":   1,
    "two":   2,
    "three": 3,
}
// 创建切片
keys := make([]string, 0)
for key := range testMap {
    keys = append(keys, key)
}
// 切片排序
sort.Strings(keys)
for _, v := range keys {
    fmt.Println(v, testMap[v])
}

按照值进行排序:

testMap := map[string]int{
    "one":   1,
    "two":   2,
    "three": 3,
}
// 创建切片
values := make([]int, 0)
for _, value := range testMap {
    values = append(values, value)
}
// 对字典的值进行排序
sort.Ints(values)
for _, v := range values {
    fmt.Println(v)
}

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

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

相关文章

Linux系统Docker部署Nexus Maven并实现远程访问本地管理界面

文章目录 1. Docker安装Nexus2. 本地访问Nexus3. Linux安装Cpolar4. 配置Nexus界面公网地址5. 远程访问 Nexus界面6. 固定Nexus公网地址7. 固定地址访问Nexus Nexus是一个仓库管理工具,用于管理和组织软件构建过程中的依赖项和构件。它与Maven密切相关,可…

如果大数据中多头借贷风险严重怎么办呢?

在大数据报告中,多头借贷风险、逾期风险、联系人风险、司法风险等是大数据评分评级的重要组成部分,大数据多头借贷风险也是很多银行和金融平台比较看重的,那如果大数据中多头借贷风险严重怎么办呢?本文详细为大家讲讲。 大数据多头风险是什么…

Niginx介绍和安装使用

Nginx是什么? Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一…

代码随想录算法训练营第二十一天|530.二叉搜索树的最小绝对差、 501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差 题目链接/文章讲解: 代码随想录 视频讲解:二叉搜索树中,需要掌握如何双指针遍历!| LeetCode:530.二叉搜索树的最小绝对差_哔哩哔哩_bilibili 1.方法1 1.1分析及思路 了解到差值最小的数…

DevEco Studio下载与安装(Windows)

下载地址: HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 安装时直接点击 next 即可。 运⾏已安装的DevEco Studio,⾸次使⽤,请选择Do not import settings,单击OK。 1.安装Node.js 如果本地有下载,可以…

C程序的编译过程

目录 一、GCC编译器 二、编译过程 1、预处理(Preprocessing) 2、编译(Compilation) 3、汇编(Assembly) 4、链接(Linking) 三、秋招真题演练 一、GCC编译器 在这里&#xf…

linux系统Jenkins工具web配置

Jenkins工具配置 插件配置系统配置系统工具配置 插件配置 下载 Maven Integration Pipeline Maven lntegration gitlab Generic webhook Trigger nodejs Blue ocean系统配置 系统配置结束系统工具配置

androidframework开发面试,阿里P8成长路线

字节跳动Android面经 一面问的 Java 和 Android 基础 1、Jvm虚拟机 2、messageQueue会不会阻塞ui线程 3、对象锁和类锁 4、之字形打印树 5、还有其他的 《Android学习笔记总结最新移动架构视频大厂安卓面试真题项目实战源码讲义》 **完整开源项目:docs.qq.com/doc…

Linux命名管道

Linux匿名管道-CSDN博客 目录 1.原理 2.接口实现 3.模拟日志 Linux匿名管道-CSDN博客 这上面叫的是匿名管道,不要将两者搞混,匿名管道说的是两个有血缘关系的进程相互通信,但是命名管道就是两个没有关系的管道相互通信。 1.原理 和匿名…

解密犯罪时间 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 HH:MM 表示的时刻。 根据警察和线人的约定,为了隐蔽,该…

RabbitMQ实战学习

RabbitMQ实战学习 文章目录 RabbitMQ实战学习RabbitMQ常用资料1、安装教程2、使用安装包3、常用命令4、验证访问5、代码示例 一、RabbitMQ基本概念1.1. MQ概述1.2 MQ 的优势和劣势1.3 MQ 的优势1. 应用解耦2. 异步提速3. 削峰填谷 1.4 MQ 的劣势1.5 RabbitMQ 基础架构1.6 JMS 二…

图形系统开发实战课程:进阶篇(上)——8.图形样式

图形开发学院|GraphAnyWhere 课程名称:图形系统开发实战课程:进阶篇(上)课程章节:“图形样式”原文地址:https://www.graphanywhere.com/graph/advanced/2-8.html 第八章 图形样式 1. 填充和描边 \quad 在图形系统实战…

vision mamba 运行训练记录,解决bimamba_type错误

下载vision mamba github上的项目后,解压,进入文件夹项目,然后配环境 unzip Vim-main.zip cd Vim-mainconda create -n mamba python3.10.13conda activate mamba pip install torch2.1.1 torchvision0.16.1 torchaudio2.1.1 --index-url ht…

java面试(网络)

TCP和UDP有什么区别?TCP三次握手不是两次? TCP:面向连接,可靠的,传输层通信协议。点对点,占用资源多,效率低。 UDP:无连接,不可靠,传输层通信协议。广播&…

照片中不想要的部分怎么去除?教你几个小妙招

照片在我们的生活中占据着无可替代的地位。它们是我们生活的缩影,定格住我们的瞬间,记录着我们的记忆,让我们可以随时随地回顾过去的美好时光。无论是家庭聚会、旅行、婚礼还是其他重要的场合,我们都会用照片来捕捉这些珍贵的时刻…

springboot 实现本地文件存储

springboot 实现本地文件存储 实现过程 上传文件保存文件(本地磁盘)返回文件HTTP访问服务器路径给前端,进行效果展示 存储 服务端接收上传的目的是提供文件的访问服务,对于SpringBoot而言,其对静态资源访问提供了很…

【Java设计模式】三、

文章目录 0、案例:咖啡屋1、简单工厂模式 静态工厂(不属于23种之列)2、工厂方法模式3、抽象工厂模式4、建造者模式5、原型设计模式 0、案例:咖啡屋 模拟咖啡店点餐。咖啡有多种,抽象类,子类为各种咖啡。咖…

element ui富文本编辑器的使用(quill-editor)

引用组件 <el-form-item label"内容"><editor v-model"obj.activity_content" :min-height"192"/> </el-form-item> 组件封装 <template><div><el-upload:action"uploadUrl":before-upload"…

Node.js如何进行性能监控和分析

Node.js作为一款流行的后端开发技术&#xff0c;其性能监控和分析对于保证系统稳定性和性能优化至关重要。在本文中&#xff0c;我们将探讨Node.js如何进行性能监控和分析&#xff0c;以便开发者能够更好地了解系统运行状况并进行必要的优化。 为什么进行性能监控和分析&#…

力扣刷题:141.环形链表

题目&#xff1a; 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中…