Map 「go

如何声明一个Map

m1 := map[int]int{1: 2, 2: 4, 3: 9}

m2 := map[int]int{}

m3 := make(map[int]int , 10)

​ 上面三种方法都可以生成一个键为int类型值为int类型的map,第一种方法可以初始化这个map,第二种只是声明了map没初始化,第三种方法看起来就有点奇怪了,传入两个参数,第一个参数是map的类型,第二个是容量,map的容量是可变的,刚声明的时候比较小,随着键值对的不断增加,就需要扩容来装载更多的元素,扩容是一个比较消耗性能的操作,所以如果我们知道我们需要的map的大小,就可以在声明的时候确定容量,减少性能的损耗。

如何从Map中读取元素

m1[1]

接上上边的第一个声明,这样来读取key为1的元素,因为是int作为key所以直接放入int值,如果是string作为key那就在[]放入string。

那读取不存在的数据会怎么样呢?

println(m1[4])
//  0

得到的结果是0,那这里就有个疑问了,如果现在map m1中就有一对键值为4:0,那我该怎么判断4这个key 是有值呢还是没值呢,自然是有方法的

if v, e := m1[4]; e {
  println(v)
} else {
  println("no")
}

e接收到一个布尔值,表示是否有值。

我们写java的时候经常会遇到空指针异常,取map中的一个不存在的键值对也会触发,go语言这样设计就避免了这个问题,但自我感觉半斤八两,可能是刚刚学习,没体会到其中妙用

如何遍历Map

for k, v := range m1 {
  println(k, v)
}

简洁明了,有编程基础的理解起来不难。

可以存放函数的Map

go语言的Map的value可以放入函数,看起来像下面代码这样

m := map[int]func(v int) int{}
m[1] = func(v int) int { return v }
m[2] = func(v int) int { return v * v }
println(m[1](2))
println(m[2](2))

这是其他编程语言不常见的特性。

原文地址:https://www.cnblogs.com/ljsh/p/13944066.html