2.4 map

Map 是一种无序的键值对的集合,一个key=>value的hash结构

声明:

  1. var map1 map[keytype]valuetype

示例:

  1. var mapLit map[string]int
  2. 未初始化的 map 的值是 nil

初始化

m = map[string]int{}

m=make(map[string]int)

声明和初始化简写如下

m := map[string]int{“one”: 1, “two”: 2}

赋值

  1. var m map[string]int
  2. m = map[string]int{"one": 1, "two": 2}
  3. m["d"] = 2
  4. fmt.Println(m)

多维map

  1. m := map[string]map[string]int{}
  2. d := map[string]int{}
  3. d["b"] = 23
  4. m["a"] = d
  5. fmt.Println(m)

删除单个元素

  1. var m map[string]int
  2. m = map[string]int{"one": 1, "two": 2}
  3. fmt.Println(m)
  4. delete(m, "one") //删除key为 one
  5. fmt.Println(m, len(m))

删除整个map元素

  1. var m map[string]int
  2. m = map[string]int{"one": 1, "two": 2}
  3. m = nil//清空map 元素
  4. fmt.Println(m, len(m))

判断key存不存在

  1. var m map[string]int
  2. m = map[string]int{"one": 1, "two": 2}
  3. if _,ok:=m["one"];!ok{
  4. fmt.Println("The key does not exist")
  5. }

比较两个map

  1. package main
  2. import (
  3. "fmt"
  4. "reflect"
  5. )
  6. func main() {
  7. m1 := map[string]int{"a": 1, "b": 2, "c": 3}
  8. m2 := map[string]int{"a": 1, "c": 3, "b": 2}
  9. //方法一
  10. fmt.Println(reflect.DeepEqual(m1, m2))
  11. //方法二
  12. fmt.Println(cmpMap(m1, m2))
  13. }
  14. func cmpMap(m1, m2 map[string]int) bool {
  15. if len(m1) == len(m2) {
  16. for k1, v1 := range m1 {
  17. if v2, ok := m2[k1]; ok {
  18. if v1 != v2 {
  19. return false
  20. }
  21. } else {
  22. return false
  23. }
  24. }
  25. return true
  26. }
  27. return false
  28. }

其中方法一用到了反射,效率相对比较低,相差大约10倍。

links