映射表
映射表( map
)是一种将 键 ( key
)映射到 值 ( value
)的数据结构。
映射表的零值是 nil
。一个 nil
映射表既不包含任何键,也不能添加。
映射表同样可以通过 make 函数来创建并初始化:
- 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 )定义。写法与 结构体 字面量类似,额外写上 键 而已。
- 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
- 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]
这样一来,如果 k 在 m 中存在, ok 便是 true
;否则, ok 则是 false
,而 elem 则是字典元素类型的 零值 。
- 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]
下一步
订阅更新,获取更多学习资料,请关注我们的 微信公众号 :