从零开始学Go之容器(三):映射

map 是一种特殊的数据结构:一种元素对(pair)的无序集合,pair 的一个元素是 key,对应的另一个元素是 value,所以这个结构也称为关联数组或字典。

声明:

var 映射名称 map[键类型]值类型

var map1 map[string]int

key 可以是任意可以用 == 或者 != 操作符比较的类型,比如 string、int、float

value 可以是任意类型的;通过使用空接口类型,我们可以存储任意值,但是使用这种类型作为值时需要先做一次类型断言

在map中key值是唯一的

映射使用:

初始化:

跟数组和切片一样,仅声明是无法使用的。需要初始化后才能使用

var a map[int]int
a = make(map[int]int)
b := make(map[string]int)//是上面两行的组合形式
c := make(map[string]int, 100)//第二个参数是容量即map长度,这个参数是可选的
d := map[int]int{1:1,2:2}//声明的同时初始化
赋值:

映射名称[键] = 值

a := make(map[int]int)
a[1] = 2

由于在map中键是唯一的,所以重复赋值会改变键对应的值

func main() {
 var a map[int]int
 a =make(map[int]int)
 a[1]=2
 a[1]=3
 fmt.Println(a)
}

运行结果

map[1:3]

取值:

变量 := 映射名称[键]

a := make(map[int]int)
a[1] = 2
b := a[1]//b=2
int c
c = a[2]//c=0

取值的方式是通过map的键值来查询,如果没有对应的键值,则会赋map值的空值

多key单value:

如果需要多key对单value的时候可以用结构体作为key

type Vertex struct {
 X, Y int
}
var a map[Vertex]int

只有当实例化的结构体的X,Y都相等时,才能找到对应的值

单key多value:

如果需要单key对多value的时候可以用切片作为value

mp1 := make(map[int][]int)
mp2 := make(map[int]*[]int)

映射遍历:

map的遍历跟数组和切片相似,一样有下标和range的方式,但是由于map的查找是hash查找,range出的索引是无序的

func main() {
 a := make(map[int]int)
 for i := 0; i < 5; i++ {
  a[i] = i
 }
 //仿C的写法
 for i := 0; i < len(a); i++ {
  fmt.Println(a[i])
 }
?
 //go中的range方法
 for k, v := range a {
  fmt.Println(k, v)
 }
}

运行结果:

0

1

2

3

4

3 3

4 4

0 0

1 1

2 2

映射元素的删除:

func delete(m map[Type]Type1, key Type)

第一个参数时map名称,第二是对应键值

func main() {
 a := make(map[int]int)
 for i := 0; i < 5; i++ {
  a[i] = i
 }
 delete(a,2)//删除map中的键值2以及对应值
 fmt.Println(a)
}

运行结果

map[4:4 0:0 1:1 3:3]

原文地址:https://www.cnblogs.com/VingB2by/p/11087322.html

时间: 2024-11-01 18:27:53

从零开始学Go之容器(三):映射的相关文章

从零开始学ios开发(三):第一个有交互的app

感谢大家的关注,也给我一份动力,让我继续前进.有了自己的家庭有了孩子,过着上有老下有小的生活,能够挤出点时间学习真的很难,每天弄好孩子睡觉已经是晚上10点左右了,然后再弄自己的事情,一转眼很快就到12点了,就要去睡了,现在身体汤不牢啊,如果不早点睡,第二天上班肯定没精神,要靠红牛了,呵呵,在这样的情况下再挤出时间学习ios真的很困难,只能是见缝插针,抓紧一切可用的时间学习,时间,挤一挤总归是有的,只是多少问题. 这几天看来书的第三章,主要讲了如何添加按钮,然后为按钮添加响应事件,当点击按钮后,触

从零开始学C#——数据类型(三)

C#数据类型 在C#中,变量分为以下几种类型: 值类型 引用类型 指针类型 值类型 值类型变量可以直接分配给一个值,他们是从类System.ValucTpyc中派生. 值类型直接包含数据,比如int.char.float,它们分别存储数字.字母.浮点数.当您声明一个int类型时,系统分配内存来存储值. 下表列出值类型: 类型 描述 范围 默认值 bool 布尔值 True 或 False False byte 8 位无符号整数 0 到 255 0 char 16 位 Unicode 字符 U +

从零开始学Go之容器(四):列表

链表内部的实现原理是双链表,可以高效地进行任意位置的元素插入和删除操作 类似的还有堆heap和环列表ring,声明和初始化的方式是相同的,只是原理以及操作的函数不同,当理解了原理操作也是很简单的. 声明与初始化: list 的初始化有两种方法:New 和声明.两种方法的初始化效果都是一致的. 变量名 := list.New() var 变量名 list.List //通过 container/list 包的 New 方法初始化 list a := list.New() //通过声明初始化list

从零开始学Go之容器(二):切片

切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型. 切片的内部结构包含开始位置地址(&).大小(len)和容量(cap). 切片并不存储任何数据,它只是描述了底层数组中的一段. 更改切片的元素会修改其底层数组中对应的元素. 声明: var 数组名 []类型 var a []int 切片的声明跟数组很相似,但是长度是不定长的,所以不需要说明长度. 切片的初始化与使用: var 数组名 []类型{初始化值列表} var a []int{1

从零开始学 Web 之 Vue.js(三)Vue实例的生命周期

大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/ 在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目.现在就让我们一起进入 Web 前端学习的冒险之旅吧! 一.vue实例的生

从零开始学java之出入门卫管理系统(三)

  这个系统包含了四块,第一块就是人员管理,经理分配三位分别有"ABC"权限的人,分别管理请假申请,请假审批,门卫登记管理.同时不属于本公司的内部人员,如别的公司的人员如果想到本公司访问,也是先通过这"ABC"权限的三个人代为写来访申请,来访审批,来访门卫登记管理.     具体步骤如下:     因为后面都会用到很多相同的方法,和相同的属性,所以我先建立了两个接口让后面的方法类和属性类都实现这两个接口,这样就降低了耦合度.     从零开始学Java之出入门卫管理

从零开始学Xamarin.Forms(三) Android 制作启动画面

Xamarin.Forms 在启动的时候相当慢,必须添加一个启动界面,步骤如下: 1.将启动画面的图片命名为:splash_screen.png,并拷贝到 Resources 文件夹下的相应 Drawable 文件夹中: 2.在其中的 Drawable 文件夹下创建 splashscreen.xml ,内容为: <?xml version="1.0" encoding="utf-8" ?> <bitmap xmlns:android="h

【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物

覆盖物,是一张地图的灵魂.有覆盖物的地图,才是完整的地图.在一张地图上,除了底层的底图(瓦片图,矢量图),控件(有功能可操作的工具),最重要最不可缺少的就是覆盖物了.覆盖物有多种,包括,标注.折线.多边形.信息窗口.聚合marker.麻点图和图片覆盖物.本文会详细介绍每一种覆盖物的概念,添加方法,修改方法,移除方法等.最后会提供示例和源代码下载. 示例demo:http://zhaoziang.com/amap/zero_3_1.html ----------------------------

【高德地图API】从零开始学高德JS API(三)覆盖物

摘要:覆盖物,是一张地图的灵魂.有覆盖物的地图,才是完整的地图.在一张地图上,除了底层的底图(瓦片图,矢量图),控件(有功能可操作的工具),最重要最不可缺少的就是覆盖物了.覆盖物有多种,包括,标注.折线.多边形.信息窗口.聚合marker.麻点图和图片覆盖物.本文会详细介绍每一种覆盖物的概念,添加方法,修改方法,移除方法等.最后会提供示例和源代码下载. 示例demo:http://zhaoziang.com/amap/zero_3_1.html -------------------------