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的键值删除了。

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

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

相关文章

如何从ChatGPT中获得最佳聊天对话效果

从了解ChatGPT工作原理开始,然后从互动中学习,这是一位AI研究员的建议。 人们利用ChatGPT来撰写文章、论文、生成文案和计算机代码,或者仅仅作为学习或研究工具。然而,大多数人不了解它的工作原理或它能做什么,所以他…

云计算和Docker分别适用场景

在大规模网络爬虫系统中,通过使用云计算和Docker技术,可以实现大规模网络爬虫系统的高效架构设计和部署。这种架构能够提供可扩展性、高可用性和灵活性,为爬虫系统的运行和管理带来便利。 云计算和Docker在大规模网络爬虫系统中有不同的业务…

华为OD机试 - 字符串分割(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、根据题意:2、例如:3、解题思路: 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《…

算法通关村14关 | 堆在数组中找第k大的元素应用

1. 在数组中找第k大元素 题目 LeetCode215:给定整数数组nums和整数k,请返回数组中第k个最大的元素, 思路 解题思路用三个,选择法,堆查找和快速排序。 我们选择用大堆小堆解决问题,“找最大用小堆&#xff…

Python飞机大战小游戏

游戏规则:键盘上下左右键控制飞机移动 游戏展示图片: 源码: 第一个py命名为:plane_main.py import pygamefrom plane_sprites import *class PlaneGame(object):# """飞机大战主游戏"""def __in…

由于cpu cache line机制在共享原子数据操作上带来的硬件干扰对多线程机制的性能影响

由于cpu cache line机制在共享原子数据操作上带来的硬件干扰会对对多线程性能造成影响。例如不同的原子数据,位于同一个cpu cache line,这时候一个处理器读取这个cpu cache line这段数据的时候,就会控制这段数据的所有权,其他想要…

ASUS华硕VivoBook15笔记本V5200EA_X515EA原装出厂Win11预装OEM系统

华硕11代酷睿笔记本电脑VivoBook_ASUSLaptop X515EA_V5200EA原厂Windows11系统 自带显卡、声卡、网卡、蓝牙等所有驱动、出厂主题壁纸、Office办公软件、华硕电脑管家MyASUS、迈克菲等预装程序 链接:https://pan.baidu.com/s/1yAEdA7aiuHK4CTdGLlSOKw?pwdo45a …

ShardingJDBC——分库分表实践

摘要 本文主要介绍分表分库,以及SpringBoot集成基于ShardingJDBC的单库分表实践。 一、Sharding-JDBC Sharding-JDBC是ShardingSphere的第一个产品,也是ShardingSphere的前身。 它定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使…

汽车服务门店小程序模板制作指南

在数字化时代,一个小程序的力量不可忽视。它不仅是展示品牌形象和提供用户服务的重要工具,更是扩大客户群体和提高营收的关键手段。对于汽车服务门店来说,拥有一个精美且功能齐全的小程序,更将成为你在竞争激烈的市场中的重要武器…

排序算法的稳定性

稳定性:对于一个数,经过多次排序,保留一个数之间的相对次序 在基础类型数据上,稳定性用处不大 在非基础类型上,可以做到对于相同元素来说,排完序相同元素之间的相对次序不变 归并排序在merge的过程中先拷贝…

django/CVE-2017-12794XSS漏洞复现

docker搭建漏洞复现环境 漏洞原理看帮助文档 # Django debug page XSS漏洞(CVE-2017-12794)分析Django发布了新版本1.11.5,修复了500页面中可能存在的一个XSS漏洞,这篇文章说明一下该漏洞的原理和复现,和我的一点点评…

ssm星空游戏购买下载平台源码和论文PPT

ssm星空游戏购买下载平台的设计与实现112 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优…

【注册岩土】Python土力学与基础工程计算.PDF-土中的应力

Python 求解代码如下: 1.#计算竖向有效自重应力2.h12#m3.h21.5#m4.h31#m5.gamma1 19# kN/m^36.gamma218# kN/m^37.gamma317# kN/m^38.sigma_c gammal * h1 gamma2*h2 gamma3 *h39.print("竖向有效自重应力…

9.1 消息 字体 颜色 文件对话框 发布软件

保存 void Widget::on_savebtn_clicked() {QString filename QFileDialog::getSaveFileName(this, "保存", "C:/Users/yc/Desktop/", "图片 (*.png *.xpm *.jpg);;文本 (*.txt);;所有文件 (*.*)");if(filename.isNull()){QMessageBox::informa…

Lvs+KeepAlived高可用高性能负载均衡

目录 1.环境介绍 2.配置keepalived 3.测试 1.测试负载均衡 2.测试RS高可用 3.测试LVS高可用 3.1测试lvs主服务宕机 3.2.测试lvs主服务器恢复 4.我在实验中遇到的错误 1.环境介绍 环境:centos7 RS1---RIP1:192.168.163.145 VIP 192.168.163.200 RS2---RIP2…

PlumeLog【lite模式】部署使用

一 简述 本文档记录PlumeLog【lite模式】模式安装使用 启动模式 优点 缺点 Lite 模式 不依赖任何外部中间件直接启动使用,部署简单 性能有限,一天10G内可以应付,最好是SSD硬盘,适合管理系统类小玩家 Plumelog: 一个简单易用的java日志…

无人机自主飞行实战入门-第一课(简介)

研究的意义:对人类操作的严重依赖,严重阻碍了泛无人机行业的发展。 飞行汽车(UAM)即将到来,不论是从成本还是安全考虑都需要自主飞行。 传统飞控基于STM32架构设计,无法满足更智能功能所需的计算量&#xf…

python评分卡模型

信用风险计量模型可以包括跟个人信用评级,企业信用评级和国家信用评级。人信用评级有一系列评级模型组成,常见是A卡(申请评分卡)、B卡(行为模型)、C卡(催收模型)和F卡(反…

震动分析国标GB/T 19873.3-2019/ISO 13373-3:2015笔记

1.国家标准 1.1震动测量 现行国家标准是:GB/T 19873.2-2009 机器状态监测与诊断 振动状态监测 第2部分:振动数据处理、分析与描述 它的起草人: 郑州机械研究所。西安热工研究院有限公司。东南大学。 主要起草人 韩国明 、张学延 、傅行…

css学习7(盒子模型)

1、盒子模型图&#xff1a; Margin(外边距) - 清除边框外的区域&#xff0c;外边距是透明的。Border(边框) - 围绕在内边距和内容外的边框。Padding(内边距) - 清除内容周围的区域&#xff0c;内边距是透明的。Content(内容) - 盒子的内容&#xff0c;显示文本和图像。 <!DO…