映射表

映射表( map )是一种将 ( key )映射到 ( value )的数据结构。

映射表的零值是 nil 。 一个 nil 映射表既不包含任何键,也不能添加。

映射表同样可以通过 make 函数来创建并初始化:

/_src/tour/maps.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
package main

import "fmt"

type Vertex struct {
    Lat, Long float64
}

var m map[string]Vertex


func main() {
    m =make(map[string]Vertex)
    m["Bell Labs"] = Vertex{
        40.68433, -74.39967,
    }
    fmt.Println(m["Bell Labs"])
}

字面量

映射表也可以用 字面量 ( literal )定义。 写法与 结构体 字面量类似,额外写上 而已。

/_src/tour/map-literals.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import "fmt"

type Vertex struct {
    Lat, Long float64
}

var m = map[string]Vertex{
    "Bell Labs": Vertex{
        40.68433, -74.39967,
    },
    "Google": Vertex{
        37.42202, -122.08408,
    },
}


func main() {
    fmt.Println(m)
}

当然了,你也可以省略类型:

/_src/tour/map-literals-continued.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package main

import "fmt"

type Vertex struct {
    Lat, Long float64
}

var m = map[string]Vertex{
    "Bell Labs": {40.68433, -74.39967},
    "Google": {37.42202, -122.08408},
}


func main() {
    fmt.Println(m)
}

操作

插入更新 映射表 m 中的一个元素:

m[key] = elem

取出一个元素:

elem = m[key]

删除一个元素:

delete(m, key)

通过 双赋值 ( two-value assignment )测试给定键是否存在:

elem, ok = m[key]

这样一来,如果 km 中存在, ok 便是 true ;否则, ok 则是 false ,而 elem 则是字典元素类型的 零值

/_src/tour/mutating-maps.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package main

import "fmt"


func main() {
    m := make(map[string]int)

    m["Answer"] = 42
    fmt.Println("The value:", m["Answer"])

    m["Answer"] = 48
    fmt.Println("The value:", m["Answer"])

    delete(m, "Answer")
    fmt.Println("The value:", m["Answer"])

    v, ok := m["Answer"]
    fmt.Println("The value:", v, "Present?", ok)
}

注解

注意到,如果变量 elem 或者 ok 未声明,可以采用 简式申明 。即:

elem, ok := m[key]

下一步

下一节 我们一起来看看 Go 语言 函数值

订阅更新,获取更多学习资料,请关注我们的 微信公众号

../_images/wechat-mp-qrcode.png

小菜学编程

微信打赏