Go Map

学习了GO语言中数组,切片类型,但是我们发现使用数组或者是切片存储的数据量如果比较大,那么通过下标来取出某个具体的数据的时候相对来说,比较麻烦。例如:

names := []string{"张三","李四","王五"}
fmt.Println(names[2])

现在要取出切片中存储的“王五”,那么需要数一下对应的下标值是多少,这样相对来说就比较麻烦。有没有一种结构能够帮我们快速的取出数据呢?就是字典结构。

说道字典大家想到的就是:
在这里插入图片描述
在使用新华字典查询某个字,我们一般都是根据前面的部首或者是拼音来确定出要查询的该字在什么位置,然后打开对应的页码,查看该字的解释。

GO语言中的字典结构是有键和值构成的。

所谓的键,就类似于新华字典的部首或拼音,可以快速查询出对应的数据。

如下图所示:
在这里插入图片描述
通过该图,发现某个键(key)都对应的一个值(value),如果现在要查询某个值,直接根据键就可以查询出某个值。

在这里需要注意的就是字典中的键是不允许重复的,就像身份证号一样。

一、 字典结构定义

map[keyType]valueType

定义字典结构使用map关键字,[ ]中指定的是键(key)的类型,后面紧跟着的是值的类型。

键的类型,必须是支持==和!=操作符的类型,切片、函数以及包含切片的结构类型不能作为字典的键,使用这些类型会造成编译错误:

//err invalid map key type []string
dict := map[[]string]int{} 

下面定义一个字典m,键的类型是整型,值的类型是字符串。

var m map[int]string
fmt.Println(m)

定义完后,直接打印,结果为空nil。

注意:字典中不能使用cap函数,只能使用len()函数。len()函数返回map拥有的键值对的数量

var m map[int]string
fmt.Println(len(m))

以上代码值为0,也就是没有值。

当然也可以使用make()函数来定义,如下所示:

m2 := make(map[int]string)
fmt.Println(m2)
fmt.Println(len(m2))

以上代码值为0,也就是没有值。

当然也可以指定容量。

m2 := make(map[int]string,3)
fmt.Println(m2)
fmt.Println(len(m2))

输出的len值还是0,因为这里并没有赋值。

接下来可以给字典m2进行赋值,并且指定容量,如果容量不够自动扩容。

m2 := make(map[int]string,3)m2[1] = "张三"
m2[2] = "李四"
m2[3] = "王五"fmt.Println(m2)
fmt.Println(len(m2))

可以直接使用键完成赋值,再次强调键是唯一的,同时发现字典m2的输出结果,不一定是按照赋值的顺序输出的,每次运行输出的顺序可能都不一样,所以这里一定要注意:map是无序的,我们无法决定它的返回顺序,所以,每次打印结果的顺利有可能不同。

map也可以定义完成后直接进行初始化

m4 := map[int]string{1:"make",2:"Go"}
fmt.Println(m4[1])
fmt.Println(m4[2])

也就是在定义的同时给他直接赋值,然后打印出来

二、 打印字典中的值

1. 可以直接通过键输出,如下所示:

m4 := map[int]string{1:"make",2:"Go"}
fmt.Println(m4[1])//make
fmt.Println(m4[2])//go

通过打印键的方式就能得到值

2. 通过循环遍历的方式输出

m4 := map[int]string{1:"make",2:"Go"}
for key,value := range m4 {fmt.Println(key)fmt.Println(value)
}
//1 make
//2 go

其中key代表的是键,value代表的是值

输出的顺序是无序的。

3. 在输出的时候,还可以进行判断。

m4 := map[int]string{1:"make",2:"Go"}
value,ok := m4[1]
if ok == true{fmt.Println(value)
}else{fmt.Println("key不存在")
}

第一个返回值为key所对应的value, 第二个返回值为key是否存在的条件,存在ok为true。

删除map中的某个元素。

根据map中的键,删除对应的元素,也是非常的方便。

如下所示:

m4 := map[int]string{1:"make",2:"Go"}
delete(m4,1) //删除key为1的内容
fmt.Println(m4)//2 go

map作为函数参数是引用传递。

func test(m map[int]string){delete(m,1)
}func main(){m4 := map[int]string{1:"make",2:"Go"}test(m4)fmt.Println(m4)// 2 go
}

第一个Test定义了一个删除键为1的方法,然后在main里面又重新初始化了一个map然后调用Test的方法,最后输出的结果就是go,因为调用Test方法的时候把键为1的键值删除了。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【小吉测评】哔哩哔哩接入AI?!效果如何?

文章目录 🎄前言⭐申请方式🏳️‍🌈注意 🛸简介🍔上手体验🛸进行数学计算🥰可以写代码吗 🎄前言 最近人工智能特别火,chatgpt,Claude2,文心一言等…

透明直接光和间接光生成

直接光: Scene:Lights:DirectLighting:InjectTranslucencyVolume TranslucentLightInjectionShaders.usf void InjectMainPS(FWriteToSliceGeometryOutput Input,out float4 OutColor0 : SV_Target0,out float4 OutColor1 : SV…

nginx反向代理 负载均衡

一、反向代理: 1.反向代理介绍: 反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。 Nginx 除了可以在企业提供高性能的web…

【Java】Java基础

环境准备 安装JDK和JRE 下载JDK,可以在官网Java Downloads | Oracle 中国下载,但是这里需要注册才能够下载。在Index of java-local/jdk (huaweicloud.com)也可以下载到,但是版本比较老,关系不大,直接下载&#xff0…

〔019〕Stable Diffusion 之 单图中绘制多人分区域写提示词 篇

✨ 目录 🎈 下载区域绘制插件🎈 区域绘制使用🎈 参数讲解和基础使用🎈 Lora 自组🎈 Lora 自组的使用🎈 分区扩散🎈 分区域提示 🎈 下载区域绘制插件 在绘制图片时,经常绘…

C语言网络编程实现广播

1.概念 如果同时发给局域网中的所有主机,称为广播 我们可以使用命令查看我们Linux下当前的广播地址:ifconfig 2.广播地址 以192.168.1.0 (255.255.255.0) 网段为例,最大的主机地址192.168.1.255代表该网段的广播地址(具体以ifcon…

无涯教程-Android - 环境设置

您可以从Oracle的Java网站下载最新版本的Java JDK-Java SE下载,您将在下载的文件中找到有关安装JDK的说明,按照给定的说明安装和配置安装程序。最后,将PATH和JAVA_HOME环境变量设置为引用包含 java 和 javac 的目录,通常分别是java_install_dir/bin和java_install_d…

oracle 12c怎样修改varchar2允许的最大长度

12C单实例测试,varchar2在早期版本中最大长度限制为4000,当字段长度指定的比较长的时候会报错:ORA-00910: specified length too long for its datatype。 早期版本中虽然SQL数据类型限制为4000(如表中的列的varchar2类型&#x…

python爬虫实战(5)--获取小破站热榜

1. 分析地址 打开小破站热榜首页,查看响应找到如下接口地址 2. 编码 定义请求头 拿到标头 复制粘贴,处理成json 处理请求头代码如下: def format_headers_to_json():f open("data.txt", "r", encoding"utf-8") # 读…

C++ 多重继承

所谓多重继承就是一个儿子有好几个爹&#xff0c;然后一个人继承了这几个爹的财产。只需注意构造顺序即可&#xff0c;反正析构的顺序也是一样的。 #include <iostream> #include <string.h> using namespace std;class base_a { public:base_a(const char *str){…

「MySQL-01」MySQL基础

目录 一、数据库概念 1. 什么是数据库 2. 为什么要有数据库&#xff1f; 3. 数据库将数据存在哪里&#xff1f; 二、知名数据库介绍 1.知名数据库介绍 2.为什么要学习MySQL 三、MySQL的基本使用 0. 安装MySQL 1. 数据库客户端链接服务端 2. Windows下的MySQL服务端管理 3. 数据…

AI 绘画Stable Diffusion 研究(十七)SD lora 详解(上)

大家好&#xff0c;我是风雨无阻。 本期内容&#xff1a; Lora的原理是什么&#xff1f;Lora如何下载安装&#xff1f;Lora如何使用&#xff1f; 大家还记得 AI 绘画Stable Diffusion 研究&#xff08;三&#xff09;sd模型种类介绍及安装使用详解 这篇文章中&#xff0c;曾简…

html中如何用vue语法,并使用UI组件库 ,html中引入vue+ant-design-vue或者vue+element-plus

html中如何用vue语法&#xff0c;并使用UI组件库 前言 先说一下本次应用的场景&#xff0c;本次项目中&#xff0c;需要引入github中别人写好的插件&#xff0c;插件比较大&#xff0c;没有方法直接在自己项目中&#xff0c;把别人的项目打包合并生成html&#xff08;类似于前…

【前车之鉴】: 2023最新教程-将java程序打包到maven私服的正确打开方式,详细流程介绍不怕你掌握不了

文章目录 为什么看这篇整体流程1. 注册账号【首次需要】2. 工单申请【新项目必须】3. 项目配置【新项目必须】4. 授权认证【新项目必须】5. 一键发布 最后也很重要 为什么看这篇 一是当前网络上一些博客有遗漏部分&#xff0c;这里做补充&#xff0c;二是网上思路没错&#xff…

[Android AIDL] --- AIDL工程搭建

0 AIDL概念 AIDL&#xff08;Android Interface Definition Language&#xff09;是一种 IDL 语言&#xff0c;用于生成可以在 Android 设备上两个进程之间进行进程间通信&#xff08;IPC&#xff09;的代码。 通过 AIDL&#xff0c;可以在一个进程中获取另一个进程的数据和调…

elementui table 在浏览器分辨率变化的时候界面异常

异常点&#xff1a; 界面显示不完整&#xff0c;表格卡顿&#xff0c;界面已经刷新完成&#xff0c;但是表格的宽度还在一点一点变化&#xff0c;甚至有无线延伸的情况 思路&#xff1a; 1. 使用doLayout 这里官方文档有说明&#xff0c; 所以我的想法是&#xff0c;监听浏览…

使用Linux部署Kafka教程

目录 一、部署Zookeeper 1 拉取Zookeeper镜像 2 运行Zookeeper 二、部署Kafka 1 拉取Kafka镜像 2 运行Kafka 三、验证是否部署成功 1 进入到kafka容器中 2 创建topic 生产者 3 生产者发送消息 4 消费者消费消息 四、搭建kafka管理平台 五、SpringBoot整合Kafka 1…

残差网络、Dropout正则化、Batch Normalization浅了解

残差网络&#xff1a; 为什么需要残差网络&#xff1a; 残差网络的目的是为了解决深度神经网络在训练过程中遇到的退化问题&#xff0c;即随着网络层数的增加&#xff0c;训练集的误差反而增大&#xff0c;而不是过拟合。残差网络的优点有以下几点&#xff1a; 残差网络可以…

mysql 间隙锁原理深度详解

目录 一、前言 二、mysql之mvcc 2.1 什么是mvcc 2.2 mvcc组成 2.2.1 Undo log 多版本链 2.2.2 ReadView 2.2.3 快照读与当前读 三、RR级别下的事务问题 3.1 RR隔离级别解决的问题 3.1.1 幻读问题 3.2 幻读效果演示 3.2.1 准备测试表和数据 3.2.2 修改事务级别 3.…

生态项目|Typus如何用Sui特性制作动态NFT为DeFi赋能

对于许多人来说&#xff0c;可能因其涉及的期权、认购和价差在内的DeFi而显得晦涩难懂&#xff0c;但Typus Finance找到了一种通过动态NFT使体验更加丰富的方式。Typus NFT系列的Tails为用户带来一个外观逐渐演变并在平台上提升活动水平时获得新特权的角色。 Typus表示&#x…