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

Posted vingb2by

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始学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]int1: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]

以上是关于从零开始学Go之容器:映射的主要内容,如果未能解决你的问题,请参考以下文章

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

从零开始学Go之基本:包函数声明与格式化输出

从零开始学Go之基本语法:基本数据类型与变量

从零开始学多线程之构建快

从零开始学 Docker-容器数据卷实战

《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射