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.mzph.cn/news/62575.shtml

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

相关文章

leetcode做题笔记120. 三角形最小路径和

给定一个三角形 triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一…

【JavaScript】版本判断

用于客户端和服务端进行版本更新判断使用,如有BUG,还望指出 效果 console.log(isAllowUpdate(1,2.0.0), // trueisAllowUpdate(2.0,2.0.0), // falseisAllowUpdate(2.0,2.0.1), // trueisAllowUpdate(2.1.1,2.1.2), // trueisAllowUpdate(2.1.3,2.1.2),…

Spring Boot集成MyBatis Plus

文章目录 一、前言二、步骤2.1、步骤 1:创建 Spring Boot 项目2.2、添加依赖2.2.1、基本的Spring和Spring MVC功能2.2.2、MySQL驱动依赖2.2.3、 MyBatis Plus 的依赖 2.3、配置数据库连接2.4、创建实体类2.5、创建 Mapper 接口2.6、编写 Service 层2.7、编写 Contro…

前端vue3+ts架构

1、vue creat 项目名称 选择自定义 选择需要的依赖 选择vue3 一路enter,选择eslistprettier 继续enter,等待安装 按步骤操作,项目启动成功 2、vscode安装5款插件 2、代码保存自动格式化,保证每个开发人员代码一致,根目…

数据结构体--5.0图

目录 一、定义 二、图的顶点与边之间的关系 三、图的顶点与边之间的关系 四、连通图 五、连通图的生成树定义 一、定义 图(Graph)是由顶点的又穷非空集合合顶点之间边的集合组成,通常表示为:G(V,E&…

CSC7203S 应用注意事项

CSC7203S 为高性能电流模式 PWM 开关电源功率转换器,满足绿色环保标准;广泛适用于经济型开关电源,如 DVD、机顶盒、传真机、打印机、LCD 显示器等。CSC7203S采用SOP-8封装。  内置 700V 高压功率开关管  输入电压(85V~265V&a…

微服务--Ribbon(负载均衡:客户端的负载均衡):服务端:nginx

默认(根据:符合判断server所在区域的性能和server的可用性划分选择服务器)轮询 官方提供负载均衡:RestTemplate整合loadBalancer

TDengine函数大全-数学函数

以下内容来自 TDengine 官方文档 及 GitHub 内容 。 以下所有示例基于 TDengine 3.1.0.3 TDengine函数大全 1.数学函数 2.字符串函数 3.转换函数 4.时间和日期函数 5.聚合函数 6.选择函数 7.时序数据库特有函数 8.系统函数 数学函数 TDengine函数大全ABSACOSASINATANCEILCOSFL…

Gitlab创建一个空项目

1. 创建项目 Project slug是访问地址的后缀,跟前边的ProjectUrl拼在一起,就是此项目的首页地址; Visibility Level选择默认私有即可,选择内部或者公开,就会暴露代码。 勾选Readme选项,这样项目内默认会带…

flink维度表关联

分析&回答 根据我们业务对维表数据关联的时效性要求,有以下几种解决方案: 1、实时查询维表 实时查询维表是指用户在Flink 的Map算子中直接访问外部数据库,比如用 MySQL 来进行关联,这种方式是同步方式,数据保证是…

大数据课程K15——Spark的TF-IDF计算Term权重

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的TF-IDF算法概念; ⚪ 了解Spark的TF-IDF算法定义; ⚪ 了解Spark的TF-IDF算法案例; 一、TF-IDF算法概述 TF-IDF(term frequency–inverse document frequency)是一种用于信…

MVC、MVP、MVVM的成本角度结合业务,如何考虑选型?一文了解方方面面

大家都知道,使用架构的目的是使程序模块化,做到模块内部的高聚合和模块之间的低耦合,使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率。那么MVC、MVP、MVVM,该怎么选?在什…

Redis——》如何评估锁过期时间

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

mall :rabbit项目源码解析

文章目录 一、mall开源项目1.1 来源1.2 项目转移1.3 项目克隆 二、RabbitMQ 消息中间件2.1 rabbit简介2.2 分布式后端项目的使用流程2.3 分布式后端项目的使用场景 三、安装RabbitMQ(Win10)3.1安装erLang语言,配置环境变量3.2 安装RabbitMQ服务端3.3 测试安装效果 四…

开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比

作者:刘军 不论您是一名开发者、架构师、CTO, 如果您曾深度参与在微服务开发中,那么相信您一定有过开源微服务框架或体系选型的疑问:Apache Dubbo、Spring Cloud、gRPC 以及 Service Mesh 体系产品如 Istio,到底应该选…

Linux 虚拟机同步时间crontab以及crond详解

目录 一 Linux 虚拟机同步时间设置 1. 检查是否安装cron服务(即时间同步器) 2. 下载时间同步器 3. 编辑crontab 内容 4. 同步更新电脑网络时间 5.设置 reload 6. 查看 crond 状态 二 crond 详解 1. 启动/关闭cron服务 2. crontab命令格式 3. …

Ceph入门到精通-OSD waring 设置建议

OSD 以下检查表明 OSD 节点存在问题。 警告 1 在 /var/lib/ceph/osd 中找到的多个ceph_fsid值。 这可能意味着您正在托管许多集群的 OSD 此节点或某些 OSD 配置错误以加入 您期望的集群。 2 设置可能会导致数据丢失,因为如果 未达到最小值,Ceph 将不会确…

ShardingSphere——柔性事务SEATA原理

摘要 Apache ShardingSphere集成了 SEATA 作为柔性事务的使用方案,本文主要介绍其实现ShardingSphere中柔性事务SEATA原理原理。帮助你更好的理解ShardingSphere原理。同时帮助大家更好的使用柔性事务SEATA原理。 一、Seata柔性事务 Apache ShardingSphere 集成了…

GDB 调试必会指南

GDB 调试必会指南 1 gdb调试 1.1 gdb介绍 GDB(GNU Debugger)是GCC的调试工具。其功能强大,描述如下:GDB主要帮助你完成下面四个方面的功能: 启动程序,可以按照你的自定义的要求随心所欲的运行程序可让调…

说说广播流与普通流

分析&回答 user actions 可以看作是事件流(普通流)patterns 为广播流,把全量数据加载到不同的计算节点。 广播流 Broadcast是一份存储在TaskManager内存中的只读的缓存数据在执行job的过程中需要反复使用的数据,为了达到数据共享&am…