Go第 9 章:map

news2025/1/11 20:00:06

Go第 9 章:map

9.1 map 的基本介绍

map 是 key-value 数据结构,又称为字段或者关联数组。类似其它编程语言的集合,
在编程中是经常使用到

9.2 map 的声明

9.2.1基本语法

var map 变量名 map[keytype]valuetype
请添加图片描述

9.2.2map 声明的举例

map 声明的举例:

var a map[string]string
var a map[string]int
var a map[int]string
var a map[string]map[string]string
注意:声明是不会分配内存的,初始化需要 make ,分配内存后才能赋值和使用。 案例演示:
请添加图片描述
对上面代码的说明

    1. map 在使用前一定要 make
    1. map 的 key 是不能重复,如果重复了,则以最后这个 key-value 为准
    1. map 的 value 是可以相同的.
    1. map 的 key-value 是无序
    1. make 内置函数数目

请添加图片描述

9.3 map 的使用

方式 1
请添加图片描述
方式 2
请添加图片描述

方式 3 map能直接动态增加长度,make里面定义的长度没啥意义

请添加图片描述
map 使用的课堂案例
课堂练习:演示一个 key-value 的 value是 map 的案例
比如:我们要存放 3 个学生信息, 每个学生有 name和 sex 信息
思路: map[string]map[string]string
代码:
请添加图片描述
请添加图片描述

9.4 map 的增删改查操

map 增加和更新:

map[“key”] = value //如果 key 还没有,就是增加,如果 key 存在就是修改。
请添加图片描述

map 删除:

说明:
delete(map,“key”) ,delete 是一个内置函数,如果 key 存在,就删除该 key-value,如果 key 不存在, 不操作,但是也不会报错
请添加图片描述
细节说明
如果我们要删除 map的所有 key ,没有一个专门的方法一次删除,可以遍历一下 key, 逐个删除
或者 map = make(…),make 一个新的,让原来的成为垃圾,被 gc 回收
请添加图片描述

map 查找:

案例演示:
请添加图片描述

9.5 map 遍历:

案例演示相对复杂的 map遍历:该 map 的 value 又是一个 map
说明:map的遍历使用 for-range的结构遍历
请添加图片描述
请添加图片描述
结果:

k1= stu01
v1= map[address:葫芦岛 name:tom sex:男]
         k2=name v2=tom
         k2=sex v2=k2=address v2=葫芦岛

k1= stu02
v1= map[address:锦州 name:lily sex:女]
         k2=name v2=lily
         k2=sex v2=k2=address v2=锦州
    

map 的长度:

请添加图片描述

9.6 map 切片

9.6.1基本介绍

切片的数据类型如果是 map,则我们称为 slice of map,map 切片,这样使用则 map 个数就可以动态变化了。

9.6.2案例演示

要求:使用一个 map 来记录 monster的信息 name 和 age, 也就是说一个 monster对应一个 map,并且妖怪的个数可以动态的增加=>map 切片

请添加图片描述
请添加图片描述

9.7 map 排序

9.7.1基本介绍

  1. golang 中没有一个专门的方法针对 map 的 key 进行排序 2) golang 中的 map 默认是无序的,注意也不是按照添加的顺序存放的,你每次遍历,得到的输出
    可能不一样. 【案例演示 1】
  2. golang 中 map 的排序,是先将 key 进行排序,然后根据 key 值遍历输出即可

9.7.2案例演示

请添加图片描述
请添加图片描述

9.8 map 使用细节

  1. map 是引用类型,遵守引用类型传递的机制,在一个函数接收 map,修改后,会直接修改原来 的 map 【案例演示】
    请添加图片描述

2) map 的容量达到后,再想 map 增加元素,会自动扩容,并不会发生 panic,也就是说 map 能动 态的增长 键值对(key-value)

3) map 的 value 也经常使用 struct 类型,更适合管理复杂的数据(比前面 value 是一个 map 更好),比如 value为 Student 结构体 【案例演示,因为还没有学结构体,体验一下即可】

请添加图片描述

9.9 map 的课堂练习题

 课堂练习:
1) 使用 map[string]map[string]sting 的 map 类型
2) key: 表示用户名,是唯一的,不可以重复
3) 如果某个用户名存在,就将其密码修改"888888",如果不存在就增加这个用户信息,(包括昵称 nickname 和 密码 pwd)。
4) 编写一个函数 modifyUser(users map[string]map[string]sting, name string) 完成上述功能
 代码实现

package main import (
"fmt" )
/*
1)使用 map[string]map[string]sting 的 map 类型 
2)key: 表示用户名,是唯一的,不可以重复 
3)如果某个用户名存在,就将其密码修改"888888",如果不存在就增加这个用户信息, (包括昵称 nickname 和 密码 pwd)。 
4)编写一个函数 modifyUser(users map[string]map[string]sting, name string) 完成上述功能 */
func modifyUser(users map[string]map[string]string, name string) {

//判断 users 中是否有 name //v , ok := users[name] if users[name] != nil {
//有这个用户
	users[name]["pwd"] = "888888" } else {
	//没有这个用户
	users[name] = make(map[string]string, 2)
	users[name]["pwd"] = "888888"
	users[name]["nickname"] = "昵称~" + name //示意
	}
}

func main() {
	users := make(map[string]map[string]string, 10) 
	users["smith"] = make(map[string]string, 2) 
	users["smith"]["pwd"] = "999999"
	 users["smith"]["nickname"] = "小花猫"
	 
	modifyUser(users, "tom") 
	modifyUser(users, "mary") 
	modifyUser(users, "smith")
	fmt.Println(users)
}

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

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

相关文章

如果这都不是爱!谷歌承包广告牌喊话苹果;亚马逊裁员的业内分析;李玟VR演唱会明日上线;AMD发布会全程高能;GitHub今日热榜 | ShowMeAI资讯日报

🎡 『Google』再次买下大幅电子广告牌,喊话苹果推动 RCS 发展 一线消息,Google 在拉斯维加斯 Harmon Corner 投放了大型新年主题广告,喊话说服苹果采用 RCS 消息协议,不要在修复像素化的照片和视频上掉链子。视频显示…

YOLOv5-C3模块实现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章地址: 365天深度学习训练营-第P8周:YOLOv5-C3模块实现🍖 作者:K同学啊一、前期准备1.设置GPUimport torch from torch import nn i…

数据库,计算机网络、操作系统刷题笔记26

数据库,计算机网络、操作系统刷题笔记26 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle…

消息队列如何保证消息幂等性消费

1 介绍 我们实际系统中有很多操作,不管你执行多少次,都应该产生一样的效果或返回一样的结果。 例如: 前端页面重复提交选中的数据,服务端只产生对应这个数据的一个反应结果,只保存一次数据。我们发起一笔付款请求&am…

裸露土堆智能识别检测系统 yolo

裸露土堆智能识别检测系统基于pythonyolo计算机视觉深度学习技术,对现场画面中土堆裸露情况进行实时分析检测,若发现画面中的土堆有超过40%部分裸露,则判定为裸露进行抓拍预警。我们选择当下YOLO最新的卷积神经网络YOLOv5来进行裸露土堆识别检…

商用密码安全性评估

商用密码应用安全性评估(简称“密评”)指在采用商用密码技术、产品和服务集成建设的网络和信息系统中,对其密码应用的合规性、正确性和有效性等进行评估。01办理依据 GM/T0054-2018《信息系统密码应用基本要求》 《信息系统密码测评要求&…

Linux内核内存分配函数kmalloc、kzalloc和vmalloc

在内核环境中,常用的内存分配函数主要有kmalloc、kzalloc和vmalloc这三个。既然这三函数都能在内核申请空间,那么这三个函数有什么区别呢?如何选用呢? kmalloc 首先是kmalloc,其函数原型为 // /include/linux/slab.…

acwing基础课——质数

由数据范围反推算法复杂度以及算法内容 - AcWing 常用代码模板4——数学知识 - AcWing 基本思想: 首先,我们给出质数的定义,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数。这里考虑三个问题&…

笔记-鼠标悬浮展示图标

鼠标悬浮展示图标 .primaryLink {color: primary-color-dark;}.primaryLink:hover {cursor: pointer;color: link-hover-color-dark;}.itemAction {display: none; }.itemMenu:hover .itemAction {display: block; }

【数据结构进阶】并查集

并查集 正如它的名字一样,并查集(Union-Find)就是用来对集合进行 合并(Union) 与 查询(Find) 操作的一种数据结构。 合并 就是将两个不相交的集合合并成一个集合。 查询 就是查询两个元素是否属…

链表常见OJ题汇总(持续更新)

目录前言一、移除链表中的元素(多指针法)二、反转链表(多指针法&头插法)三、链表的中间结点(算数法和双指针法)四、链表中的第K个结点(算数法&双指针法)五、合并两个有序链表…

vue 父子组件设置 scoped, 如何导致滚动条失效的

vue父组件的页面结构 // 调用子组件 <process-time-line :nodeArr"nodeArr"></process-time-line> 父组件的样式 <style lang"scss" scoped> ::-webkit-scrollbar {width: 0px;height: 0px;} </style>子组件的页面结构 <div …

学习C语言笔记:字符串和格式化输入/输出

学习内容&#xff1a;1.函数——strlen()&#xff1b;2.关键字——const&#xff1b;3.字符串&#xff1b;4..如何创建、存储字符串&#xff1b;5.如何使用strlen()函数获取字符串的长度&#xff1b;6.用C预处理器指令#define和ANSIC的const修饰符创建符号常量。与程序交互和使…

《Linux运维实战:Centos7.6基于docker-compose一键离线部署redis6.2.8之哨兵集群》

一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&#xff0c;而作为基础组件中的redis针对不同的客户环境需要多次部署哨兵集群&#xff0c;作为一个运维工程师&#xff0c;提升工作效率也是工作中的重要一环。所以我觉得有必要针对re…

(Java高级教程)第三章Java网络编程-第一节3:网络编程必备网络知识3之IP地址、端口号

文章目录一&#xff1a;网络传输基本流程&#xff08;1&#xff09;数据包&#xff08;2&#xff09;网络传输的基本流程&#xff08;3&#xff09;具体处理过程A&#xff1a;发送数据B&#xff1a;路由转发C&#xff1a;接受数据二&#xff1a;网络中的地址&#xff08;1&…

Elasticsearch-使用入门

_cat /_cat/nodes&#xff1a;查看所有节点 接口&#xff1a;GET http://192.168.177.134:9200/_cat/nodes /_cat/health&#xff1a;查看ES健康状况 接口&#xff1a;GET http://192.168.177.134:9200/_cat/health /_cat/master&#xff1a;查看主节点信息 接口&#xff1a;G…

【Azure 架构师学习笔记】-Azure Logic Apps(3)-演示1

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Logic Apps】系列。 接上文【Azure 架构师学习笔记】-Azure Logic Apps&#xff08;2&#xff09;-组件介绍 前言 前面两篇文章大概介绍了一些理论知识&#xff0c;但是为用而学才是最重要的&#xff0c;所以接下来做…

word排版时如何保证每张图片大小一样?

问题描述 为了保证文档的美观性&#xff0c;在对图片进行排版时&#xff0c;最好保证图片的大小一致&#xff0c;尤其是多张图片组成一张大图时。 如果一张张图片调整大小&#xff0c;那真的是毫无技术含量的耗时工作。 解决方案 在这提出一种借助表格的解决办法。比如有4张…

Parasoft发布最广泛的MISRA规则覆盖-C/C++test最新版本正式上线!

作为拥有30多年自动化软件测试经验的全球领导者Parasoft宣布发布Parasoft C/Ctest的最新2022.2版本&#xff0c;支持MISRA C:2012修正案3和MISRA C 202x的草案版本。Parasoft针对C和C软件开发的统一、完全集成的测试解决方案的最新版本&#xff0c;帮助团队实现自动化静态分析和…

【java入门系列三】java基础-控制结构

学习记录&#x1f914;分支控制if-elseswitch分支接收字符for循环控制while循环do-while打印金字塔break终止-可以用label&#xff1a;表明continue与break类似return循环中表示直接退出方法(函数)&#xff0c;主方法直接结束字符串比较trick讨论总结谢谢点赞交流&#xff01;(…