映射表

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

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

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

/_src/tour/maps.go

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type Vertex struct {
  6. Lat, Long float64
  7. }
  8.  
  9. var m map[string]Vertex
  10.  
  11.  
  12. func main() {
  13. m =make(map[string]Vertex)
  14. m["Bell Labs"] = Vertex{
  15. 40.68433, -74.39967,
  16. }
  17. fmt.Println(m["Bell Labs"])
  18. }

字面量

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

/_src/tour/map-literals.go

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type Vertex struct {
  6. Lat, Long float64
  7. }
  8.  
  9. var m = map[string]Vertex{
  10. "Bell Labs": Vertex{
  11. 40.68433, -74.39967,
  12. },
  13. "Google": Vertex{
  14. 37.42202, -122.08408,
  15. },
  16. }
  17.  
  18.  
  19. func main() {
  20. fmt.Println(m)
  21. }

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

/_src/tour/map-literals-continued.go

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type Vertex struct {
  6. Lat, Long float64
  7. }
  8.  
  9. var m = map[string]Vertex{
  10. "Bell Labs": {40.68433, -74.39967},
  11. "Google": {37.42202, -122.08408},
  12. }
  13.  
  14.  
  15. func main() {
  16. fmt.Println(m)
  17. }

操作

插入更新 映射表 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 则是字典元素类型的 零值

/_src/tour/mutating-maps.go

  1. package main
  2.  
  3. import "fmt"
  4.  
  5.  
  6. func main() {
  7. m := make(map[string]int)
  8.  
  9. m["Answer"] = 42
  10. fmt.Println("The value:", m["Answer"])
  11.  
  12. m["Answer"] = 48
  13. fmt.Println("The value:", m["Answer"])
  14.  
  15. delete(m, "Answer")
  16. fmt.Println("The value:", m["Answer"])
  17.  
  18. v, ok := m["Answer"]
  19. fmt.Println("The value:", v, "Present?", ok)
  20. }

注解

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

elem, ok := m[key]

下一步

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

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

../_images/wechat-mp-qrcode.png小菜学编程

微信打赏