映射表( 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 中的一个元素:
取出一个元素:
删除一个元素:
通过 双赋值( two-value assignment )测试给定键是否存在:
这样一来,如果 k 在 m 中存在, 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 未声明,可以采用 简式申明 。即:
【小菜学Go语言】系列文章首发于公众号【小菜学编程】,敬请关注:
