非零基础自学Golang 第6章 Go语言内置容器 6.3 映射

news2024/11/26 11:58:48

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第6章 Go语言内置容器
        • 6.3 映射
          • 6.3.1 声明映射
          • 6.3.2 初始化映射
          • 6.3.3 遍历映射
          • 6.3.4 从映射中删除键值对

第6章 Go语言内置容器

6.3 映射

映射(map)是一种无序的键值对的集合,map的键类似于索引,指向数据的值。

当我们的程序中需要存放有关联关系的数据时,往往就会用到map。

例如,我们可以将国家中文名和其英文名关联起来,生成如下映射:

country := map[string]string{
	"中国":"China",
 	"美国":"America",
 	"日本":"Japan",
}
6.3.1 声明映射

map的声明格式如下:

var map [键类型]值类型

如果我们需要建立一个学生和其成绩的对应关系,样例如下:

[ 动手写 6.3.1 ]

package main

import "fmt"

func main() {

   var studentScoreMap map[string]int

   fmt.Println(studentScoreMap)
}

运行结果

在这里插入图片描述

6.3.2 初始化映射

【1】在声明的同时初始化

我们可以在声明map的同时对其进行初始化:

[ 动手写 6.3.2 ]

package main

import "fmt"

func main() {

   var studentScoreMap = map[string]int{
      "Tom":   80,
      "Ben":   85,
      "Peter": 90,
   }

   fmt.Println(studentScoreMap)
}

运行结果

在这里插入图片描述

【2】使用make() 函数初始化

与切片的初始化类似,map也可以使用make()函数来进行初始化,格式如下:

make(map[键类型]值类型,map容量)

注意:使用make()函数初始化map时可以不指定map容量,但是对于map的多次扩充会造成性能损耗。

cap()函数只能用于获取切片的容量,无法获得map的容量,因此可以通过len()函数获取map的当前长度。

[ 动手写 6.3.3]

package main

import "fmt"

func main() {

   var studentScoreMap map[string]int

   studentScoreMap = make(map[string]int)
   studentScoreMap["Tom"] = 80
   studentScoreMap["Ben"] = 85
   studentScoreMap["Peter"] = 90

   fmt.Println("map 长度为: ", len(studentScoreMap))
   fmt.Println(studentScoreMap)
}

运行结果

在这里插入图片描述

6.3.3 遍历映射

map的遍历主要通过for循环来完成,遍历时可同时获得map的键和值。

[ 动手写 6.3.4]

package main

import "fmt"

func main() {

   var studentScoreMap map[string]int

   studentScoreMap = make(map[string]int)
   studentScoreMap["Tom"] = 80
   studentScoreMap["Ben"] = 85
   studentScoreMap["Peter"] = 90

   for k, v := range studentScoreMap {
      fmt.Println(k, v)
   }
}

运行结果

在这里插入图片描述

若只想遍历键,for循环可改写成如下形式:

for k := range studentScoreMap {
   fmt.Println(k)
}

运行结果

在这里插入图片描述

若只想遍历值,for循环可改写成如下形式:

for _, v := range studentScoreMap {
   fmt.Println(v)
}

运行结果

在这里插入图片描述

6.3.4 从映射中删除键值对

Go语言通过delete()函数来对map中的指定键值对进行删除操作,delete()函数格式如下:

delete(map,键)

其中map为要删除的map实例,键为map键值对中的键。

[ 动手写 6.3.5]

package main

import "fmt"

func main() {

   var studentSroreMap map[string]int

   studentSroreMap = make(map[string]int)
   studentSroreMap["Tom"] = 80
   studentSroreMap["Ben"] = 85
   studentSroreMap["Peter"] = 90

   delete(studentSroreMap, "Tom")
   fmt.Println(studentSroreMap)
}

运行结果

在这里插入图片描述

注意:delete()函数会直接删除指定的键值对,而不是仅仅删除键或值。

另外,Go语言没有为map提供清空所有元素的方法,想要清空map的唯一方法就是重新定义一个新的map。

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

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

相关文章

聚观早报 | 特斯拉上线Steam平台;苹果CEO库克访问索尼

今日要闻:特斯拉上线Steam平台;苹果CEO库克访问索尼;三星向华为转让多项专利;NASA将在太空调查水资源;传推特拖欠总部租金数周特斯拉上线Steam平台 12 月 14 日消息,特斯拉已经为其ModelS和ModelX电动汽车上…

建筑建材企业如何高效进行合同签署?数商云B2B系统推动企业合同签约规范化

建筑建材行业作为重要的材料工业,其主要产品包括建筑材料及制品、非金属矿及制品、无机非金属新材料三大门类,现广泛应用于建筑、军工、环保、高新技术产业和人民生活等领域,占国民生产总值的20%左右,但目前建筑建材行…

开关电源环路稳定性分析(08)——电流型补偿网络

大家好,这里是大话硬件。 在上一节分析了3种类型的电压型补偿网络,当然前面的内容还达不到环路补偿的要求,在后面会有内容对其进行补充。我们先把整个开关电源的闭环控制所需要基本知识点过一遍,再针对性的分析。 这一讲我们来分…

源码角度详解Java中的优先队列PriorityQueue(堆的实现)

if (e null) throw new NullPointerException(); modCount; int i size; if (i > queue.length) grow(i 1); size i 1; if (i 0) queue[0] e; else siftUp(i, e); return true; } 在offer方法中,我们会先判断数组是否需要扩容,然…

DataX 原理解析和性能优化

datax简介 datax是阿里开源的用于异构数据源之间的同步工具,由于其精巧的设计和抽象,数据同步效率极高,在很多公司数据部门都有广泛的使用。本司基于datax在阿里云普通版的rds服务器上实现了通过公网,从阿里云杭州到美国西部俄勒…

一种基于Spark深度随机森林的网络入侵检测模型

一种基于Spark深度随机森林的网络入侵检测模型学习目标学习内容目前存在的不足为了解决这个问题特征分片深度并行随机森林Deep Parallel Random Forest(DPRF)投票策略Spark 上的并行化高复用缓存计算每个RDD的权重分层替换模型评估局限性参考论文申明: 未经许可&…

ASP.NET Core Web API 学习笔记

目录 一、Demo 1. 创建项目 2. 启动项目 3. 编写 api demo 二、C# .NET WEB 程序结构 一、Demo 1. 创建项目 创建的项目结构如下: Properties 配置文件,存放了一些 .json 文件用于配置 ASP.NET Core 项目 Propertics/launchSettings.json 启动配置文件&…

以岭药业:连花清瘟火爆背后,数字化重塑人力资源管理

近日,随着疫情防控政策“国十条”发布,新冠防疫政策逐步进入后防疫时代,每个人要做自己健康的“第一责任人”。而连花清瘟作为中医药治疗新冠肺炎筛选出的“三药三方”之一,也成为新疫情防控模式下的家庭常备药。连花清瘟自上市以…

怎么将图片内容转换成文字?这两种方法可以轻松实现

如何将图片的内容转换成文字呢?大家在使用图片文件的时候,遇到那种图片中包含一些有用的文字信息时,没有办法直接复制下来使用,只能对照着图片将文字信息给记录下来,这样会很耗费我们的时间。其实是有方法能够直接将图…

Python学习中常见的几个报错,看你踩雷没

前言 嗨嗨 今天给大家统计一下, 在学习Python中遇到的常见报错, 不一定会很全面, 但是应该会持续更新, 有用的话, 记得收藏哦~ 下面我会总结遇到的报错截图, 给出解决办法, 如果有需要补充的报错, 或者你解决不了的报错, 欢迎来文章最下方QQ群里面找我~ 1. 模块未安装 (Mod…

面试中这样介绍自己的项目经验,轻松拿Offer

面试时7分靠能力,3分靠技能,而刚开始时的介绍项目又是技能中的重中之重,所以本文将从“介绍”和“引导”两大层面告诉大家如何准备面试时的项目介绍。 在面试时,经过寒暄后,一般面试官会让介绍项目经验 。常见的问法是…

Go C 编程 第4课 变色魔法(魔法学院的奇幻之旅 有Go C编程绘图)

慧通教育 慧通教育 34.画彩色旗帜 (魔法学院第4课)--2022.12.15 登录 35.画转动的方形 (魔法学院第4课) 登录 36.画wifi信号 (魔法学院第4课) 登录 888.哪个大? (课程6) 难度:1 登录 889.余数大小 (课程6) 难度:1 登录 适合…

Java学习—网络编程

网络编程 目的:数据交换、通信 1. 网络通信的要素 通信双方地址(IP端口号)网络通信协议 Java万物皆对象 2. IP地址 IP地址的类:InetAddress 唯一定位一台网络上的计算机127.0.0.1 本机地址 package com.xiaozhang.lesson01;…

第二证券|钠电池三种技术路线谁更将率先取代锂电池?

锂电网讯:近段时刻,钠离子电池遭到资本商场重视,不少公司公布了在钠电池范畴的最新进展。11月29日,中科海钠(阜阳)全球首条GWh级钠离子电池出产线产品下线。中科海钠总经理李树军透露,阜阳产线计划在下一年扩产至3GWh-…

大数据学习:shell基础(2)

文章目录tail命令选项参数任务一:显示文件最后4行内容任务二:显示文件最后4个字符内容任务三:显示文件修改行sort命令选项参数任务一:对文件按行排序任务二:对文件按第4节排序cut命令参数说明任务一:提取ip…

想要查询数据表中的前几名该怎么实现?看这篇文章吧

一. 需求分析 我们在学习数据库查询时,经常会遇到关于分组和聚合函数的查询,比如查询每门课程的最高分,每位同学的平均分,其实这些都是比较一般的问题。但如果遇到查询每门课程成绩的前几名问题,就会变的很棘手&#…

【深度学习】Tensorflow、MindSpore框架介绍及张量算子操作实战(超详细 附源码)

一、Tensorflow、MindSpore Google公司于2015年开源了深度学习框架TensorFlow,推动了深度学习的发展,得到了广泛应用,用户数量庞大。 华为公司于2020年开源了自己的深度学习框架MindSpore,现处于快速发展中。 TensorFlow2深度学…

直播 | 新一代极速云原生湖仓的技术内核,StarRocks PMC 今天下午为你揭秘!

12 月 14-16 日,第 13 届中国数据库技术大会(DTCC 2022)将在线上隆重召开。本届大会重点围绕云原生数据库、分布式数据库、时序数据库、图数据技术、实时数仓技术与应用实践、金融业数据库应用实践等内容展开分享和探讨。 12 月 14 日 14:20…

ESP32 与 ESP32-CAM 的关系

ESP32 与 ESP32-CAM 的关系 以下分别介绍 ESP32 与 ESP32-CAM,两者之间的关系可以简单用下表来说明: ESP32ESP32-CAM开发公司乐鑫信息科技安信可科技模块关系ESP32 系列 ( 共有ESP32-S 系列、ESP32-C 系列与ESP32 系列)ESP32 系列中的ESP32-WROVER 模组…

(九)Java网络编程无冕之王-这回把大名鼎鼎的Netty框架一网打尽!

引言 现如今的开发环境中,分布式/微服务架构大行其道,而分布式/微服务的根基在于网络编程,而Netty恰恰是Java网络编程领域的无冕之王。Netty这个框架相信大家定然听说过,其在Java网络编程中的地位,好比JavaEE中的Sprin…