当前位置: 首页 > news >正文

【Go语言基础】Go语言中的map集合详细使用(附带源码)

文章目录

  • Go语言中的map集合
    • 1-1 定义
    • 1-2 map遍历
    • 1-3 map集合删除
    • 1-4 map是引用类型

Go语言中的map集合

Go 语言提供了内置类型 map集合,它将一个值与一个键关联起来,可以使用相应的键检索值。

  • map是一种集合,可以像遍历数组或切片那样去遍历它。因为map是由Hash表实现的,所以对map的读取顺序不固定。
  • map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必须通过key获取。
  • map的长度是不固定的,和切片一样可以扩展。

内置的len()函数同样适用于map,返回map拥有的键值对的数量。但是map不能通过cap()函数计算容量(或者说cap()函数的参数不可以是map)。
同一个map中key必须保证唯一。key的数据类型必须是可参与比较运算的类型,也就是支持==或!=操作的类型,如布尔型、整型、浮点型、字符串、数组。切片、函数等引用类型则不能作为key的数据类型。
map的value可以是任何数据类型。map和切片一样,也是一种引用类型。

1-1 定义

  • map声明
    • 使用make()函数:变量名 := make(map[key类型]value类型)
      • 该声明方式,如果不初始化map,map也不等于nil。
    • 使用var关键字定义map:var 变量名 map[key类型] value类型
      • 使用var关键字声明map,未初始化的map的默认值是nil。
      • nil map不能存放键值对。
      • 如果要使用map存储键值对,必须在声明时初始化,或者使用make()函数分配到内存空间。

1-2 map遍历

  • map的初始化赋值和遍历
package mainimport "fmt"func main() {//1、声明时同时初始化var country = map[string]string{"China":  "Beijing","Japan":  "Tokyo","India":  "New Delhi","France": "Paris","Italy":  "Rome",}fmt.Println(country)// 短变量声明初始化方式rating := map[string]float64{"c": 5, "Go": 4.5, "Python": 4.5, "C++": 3}fmt.Println(rating)//2、创建map后再赋值countryMap := make(map[string]string)countryMap["China"] = "Beijing"countryMap["Japan"] = "Tokyo"countryMap["India"] = "New Delhi"countryMap["France"] = "Paris"countryMap["Italy"] = "Rome"//3、遍历map(无序)//(1)、key 、value都遍历for k, v := range countryMap {fmt.Println("国家", k, "首都", v)}fmt.Println("-----------")//(2)、只展示valuefor _, v := range countryMap {fmt.Println("国家", "首都", v)}fmt.Println("-----------")//(3)、只展示keyfor k := range countryMap {fmt.Println("国家", k, "首都", countryMap[k])}
}
  • 查看元素在集合中是否存在
    • 可以通过key获取map中对应的value值。语法为:map[key]。
    • 当key不存在时,会得到该value值类型的默认值,比如string类型得到空字符串,int类型得到0,程序不会报错。
    • 可以通过value, ok := map[key]获知key/value是否存在。ok是bool型,如果ok是true,则该键值对存在,否则不存在。
package mainimport "fmt"func main() {countryMap := make(map[string]string)countryMap["China"] = "Beijing"countryMap["Japan"] = "Tokyo"countryMap["India"] = "New Delhi"countryMap["France"] = "Paris"countryMap["Italy"] = "Rome"//查看元素是否在map中存在value, ok := countryMap["England"]fmt.Printf("%q \n", value)fmt.Printf("%T , %v \n", ok, ok)if ok {fmt.Println("首都:", value)} else {fmt.Println("首都信息未检索到!")}//或者if value, ok := countryMap["USA"]; ok {fmt.Println("首都:", value)} else {fmt.Println("首都信息未检索到!")}
}

1-3 map集合删除

  • delete(map, key) 函数用于删除集合的某个元素,参数为map和其对应的key。删除函数不返回任何值。

  • Go语言没有为map提供清空所有元素的函数,清空map的唯一办法是重新make一个新的map。不用担心垃圾回收的效率,Go语言的垃圾回收比写一个清空函数更高效。

package mainimport "fmt"func main() {//1、声明并初始化一个mapmap1 := map[string]string{"element":    "div","width":      "100px","height":     "200px","border":     "solid","background": "none",}//2、根据key删除map中的某个元素fmt.Println("删除前:", map1)if _, ok := map1["background"]; ok {delete(map1, "background")}fmt.Println("删除后:", map1)//3、清空map//map1 = map[string]string{}map1 = make(map[string]string)fmt.Println("清空后:", map1)
}

1-4 map是引用类型

  • map与切片相似,都是引用类型。将一个map赋值给一个新的变量时,它们指向同一块内存(底层数据结构)。修改两个变量的内容都能够引起它们所指向的数据发生变化。
package mainimport "fmt"func main() {personSalary := map[string]int{"Steven": 18000,"Daniel": 5000,"Josh":   20000,}fmt.Println("原始薪资:", personSalary)newPersonSalary := personSalarynewPersonSalary["Daniel"] = 8000fmt.Println("修改后newPersonSalary:", newPersonSalary)fmt.Println("personSalary受影响情况:", personSalary)
}

虽然就底层而言,所有的数据都是由比特组成,但计算机一般操作的是固定大小的数,如整型、浮点型、布尔型、字符串、字符(byte、rune)等。进一步将这些数组织在一起,就可表达更多的对象。

Go语言提供了丰富的数据组织形式,这依赖于Go语言内置的数据类型。这些内置的数据类型,如函数与指针、数组、切片、map等,兼顾了硬件的特性和表达复杂数据结构的便捷性。

相关文章:

【Go语言基础】Go语言中的map集合详细使用(附带源码)

文章目录Go语言中的map集合1-1 定义1-2 map遍历1-3 map集合删除1-4 map是引用类型Go语言中的map集合 Go 语言提供了内置类型 map集合,它将一个值与一个键关联起来,可以使用相应的键检索值。 map是一种集合,可以像遍历数组或切片那样去遍历它…...

C++11 lambda

Lambda 介绍 Lambda 函数也叫匿名函数, 是C 11中新增的特性; 1. Lambda函数的好处 如果你的代码里面存在大量的小函数,而这些函数一般只被调用一次,那么将他们重构成 lambda 表达式。 Lambda函数使代码变得更加紧凑、更加结构化和更富有表现…...

【新】华为OD机试 - 分苹果(Python)

分苹果 题目 AB两个人把苹果分为两堆 A希望按照他的计算规则等分苹果 他的计算规则是按照二级制加法计算 并且不计算进位12+5=9(1100+0101=9), B的计算规则是十进制加法, 包括正常进位,B希望在满足A的情况下获取苹果重量最多 输入苹果的数量和每个苹果重量 输出满足A的情况下…...

Python 模块

Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 把相关的代码分配到一个模块里能让你的代码更好用,更易懂。 模块能定义函数&#…...

gdb调试功能从零到会(Linux详解)

目录 👀 1.安装gdb 👀2.判断是否安装成功 👀3.改成debug方式发布。 👀 4.gdb功能简介 前言 gdb是Linux 下功能全面的调试工具。gdb支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。在Linux环境软件…...

【C语言学习笔记】:数组、指针相关面试题

无特殊说明情况下,下面所有题s目都是linux下的32位C程序。 「1、计算以下sizeof的值。」 char str1[] {a, b, c, d, e}; char str2[] "abcde";char *ptr "abcde";char book[][80]{"计算机应用基础","C语言","C程…...

go语言环境配置 项目启动

一 安装go语言 go语言各个版本之间兼容性比较差。所以可能你需要安装固定的版本 1 安装最新版的go brew install go2 查看go可以安装的版本 brew search go3 安装指定版本的go brew install go1.134 查看安装的go语言的版本 go version5 查看go的安装路径 which go || w…...

Springboot 使用插件 自动生成Mock单元测试 Squaretest

缘起 很多公司对分支单测覆盖率会有一定的要求,比如 单测覆盖率要达到 60% 或者 80%才可以发布。 有时候工期相对紧张,就优先开发功能,测试功能,然后再去补单元测试。 但是编写单元测试又比较浪费时间,有没有能够很大…...

「JVM 执行引擎」栈架构的字节码的解释执行引擎

JVM 执行引擎在执行 Java 代码时有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择; HotSpot 实际的实现中,模版解释器工作时,并不是按照概念模型中进行机械式计…...

SSM项目-商城后台管理系统

SSM项目-商城后台管理系统开发说明开发环境项目界面演示项目功能具体的技术指标开发过程1、搭建SSM框架1.1、建库建表1.2、新建Maven工程1.3、配置pom.xml1.4、目录结构1.5、jdbc.properties1.6、mybatis-config.xml1.7 两个Spring的配置文件applicationContext_dao.xmlapplica…...

什么是装运单IFTMIN?

符合EDIFACT国际报文标准的IFTMIN主要用于传输电子运输订单,这些装运单作为EDI数据交换的一部分,由客户或托运人发送给物流服务提供商。通过EDI传输的运输信息可以被用来计划当前所需的运输能力,并且物流服务提供商也可以据此提前将包装材料准…...

深度负反馈

负反馈放大电路的方块图因为负反馈放大电路有四种组态,而且对于同一种组态,具体电路也各不相同;所以为了研究负反馈放大电路的共同规律,可以利用方块图来描述所有电路一.负反馈放大电路的方块图表示法任何负反馈放大电路都可以用下…...

【每日随笔】手指训练 ( 产品需求探索、技术无关 | 手指训练作用 | 哪些人需要手指训练 | 手指操 | 手指康复训练器材 )

文章目录一、手指训练作用二、哪些人需要手指训练三、手指操四、手指康复训练器材产品需求探索 , 研究下手指训练的市场 , 前景 , 是否可以开发 ; 一、手指训练作用 手指训练作用 : 改善 上肢协调性手眼 协调性训练提高 手指 抓握 能力提高 手指 灵活性提高 上肢运动 准确性 和…...

Apple Safari 16.3 - macOS 专属免费浏览器 (独立安装包免费下载)

Safari 浏览器 16 for macOS Montery, Big Sur 请访问原文链接:https://sysin.org/blog/apple-safari-16/,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org 之前 Safari 浏览器伴随 macOS 更新一起发布&#xff…...

【java】Spring Boot --Spring Boot 集成 MyBatis

文章目录1. 前言2. 实例场景3. 数据库模块实现4. Spring Boot 后端实现4.1 使用 Spring Initializr 创建项目4.2 引入项目依赖4.3 数据源配置4.4 开发数据对象类4.5 开发数据访问层4.6 添加 MyBatis 映射文件5. 测试6. 小结1. 前言 企业级应用数据持久层框架,最常见…...

python正则表达式

python正则表达式 作者:AOAIYI 创作不易,如果觉得文章不错或能帮到你学习,记得点赞收藏评论一下哦 文章目录python正则表达式一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤总结一、实验目的 学会使用常见的正则表达式 二、…...

【C++】二叉树的非递归遍历

非递归遍历二叉树一、二叉树的前序遍历二、二叉树的中序遍历三、二叉树的后序遍历3.1 方法一3.2 方法二一、二叉树的前序遍历 题目链接 我们可以把任何一棵树看成左路节点,左路节点和右子树。先访问左路节点,再访问左路节点的右子树。在右子树中也重复这…...

Linux——线程同步(条件变量、POSIX信号量)和线程池

一.线程同步(一).概念线程同步是一种多线程关系,指的是线程之间按照特定顺序访问临界资源,进而能够避免线程饥饿问题。所谓线程饥饿指的是某个线程长期“霸占”临界资源,导致其他线程无法访问该资源。而通过线程同步机…...

leaflet 上传CSV文件,导出geojson格式文件(064)

第064个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载CSV文件,将图形显示在地图上。点击导出geojson,下载成geojson文件。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共114行)安装插件…...

Java内部类

文章目录一、内部类的概念二、内部类的分析三、内部类的分类1. 成员内部类2. 静态内部类3. 局部内部类4. 匿名内部类匿名内部类与Lambda表达式一、内部类的概念 在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。内部类…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...

精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑

精益数据分析&#xff08;98/126&#xff09;&#xff1a;电商转化率优化与网站性能的底层逻辑 在电子商务领域&#xff0c;转化率与网站性能是决定商业成败的核心指标。今天&#xff0c;我们将深入解析不同类型电商平台的转化率基准&#xff0c;探讨页面加载速度对用户行为的…...

Cursor AI 账号纯净度维护与高效注册指南

Cursor AI 账号纯净度维护与高效注册指南&#xff1a;解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后&#xff0c;许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...

用 FFmpeg 实现 RTMP 推流直播

RTMP&#xff08;Real-Time Messaging Protocol&#xff09; 是直播行业中常用的传输协议。 一般来说&#xff0c;直播服务商会给你&#xff1a; ✅ 一个 RTMP 推流地址&#xff08;你推视频上去&#xff09; ✅ 一个 HLS 或 FLV 拉流地址&#xff08;观众观看用&#xff09;…...