map

-类似其他语言中的哈希表或者字典,以 key-value 形式存储数据
-key 必须是支持 ==!= 比较运算的类型,不可以是函数,mapslice
-map 查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍
-map 使用 make() 创建,支持 := 这中简写方式

-make([keyType]valueType, cap) , cap 表示容量,可省略
-超出容量时会自动扩容,但尽量提供一个合理的初始值
-使用 len() 获取元素个数

-键值不存在时自动添加,使用 delete() 删除某键值对
-使用 for rangemapslice 进行迭代操作

  1. //创建
  2. var m map[int]string
  3. m = map[int]string{}
  4. //使用 make() 创建
  5. m := make(map[int]string)
  6. //存入键值对
  7. m[1] = "ok"
  8. //删除键值对
  9. delete(m, 1)
  10. fmt.Println(m)
  11. //map多层嵌套时每一层都需要初始化
  12. var a map[int]map[int]string
  13. a = make(map[int]map[int]string)
  14. a[1] = make(map[int]string)
  15. a[1][1] = "hello"
  16. //第一个参数 s 获取 a[1][1] 的值, 第二个参数 ok 获取 a[1][1] 是否存在的bool值
  17. s, ok := a[1][1]
  18. fmt.Println(s)
  19. fmt.Println(ok)
  20. //创建一个切片a包含5个map, 并在迭代中初始化与插入键值对
  21. a := make([]map[int]string, 5)
  22. for i := range a {
  23. a[i] = make(map[int]string)
  24. a[i][1] = "OK"
  25. }
  26. fmt.Println(a)
  27. //使用 sort 包排序
  28. m := map[int]string{1:"a", 2:"b", 3:"c"}
  29. s := make([]int, len(m))
  30. i := 0
  31. for k, _ := range m {
  32. s[i] = k
  33. i++
  34. }
  35. sort.Ints(s)
  36. fmt.Println(s)
  37. //课后作业
  38. m := map[int]string{1:"a", 2:"b", 3:"c"}
  39. a := make(map[string]int)
  40. for k, v := range m {
  41. a[v] = k
  42. }
  43. fmt.Println(a)