映射表( 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语言】系列文章首发于公众号【小菜学编程】,敬请关注: