Go语言映射表入门

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

映射表的零值是 nil 。 一个 nil 映射表不包含任何键值数据,而且也不能添加新数据。

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

 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

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

字面量

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
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)
}

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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 中的一个元素:

1
m[key] = elem

取出一个元素:

1
elem = m[key]

删除一个元素:

1
delete(m, key)

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

1
elem, ok = m[key]

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
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 未声明,可以采用 简式申明 。即:

1
elem, ok := m[key]

【小菜学Go语言】系列文章首发于公众号【小菜学编程】,敬请关注:

【小菜学Go语言】系列文章首发于公众号【小菜学编程】,敬请关注: