map : 一种key-value的数据结构
image.png
image.png

快速入门

  1. //1. 声明 map
  2. var mapA map[int]string
  3. fmt.Println(mapA)
  4. //2. 分配内存
  5. mapA = make(map[int]string, 10)
  6. //3. 赋值
  7. mapA[0] = "aaa"
  8. mapA[1] = "bbb"
  9. fmt.Println(mapA)

使用方式

  1. //使用方式
  2. //第一种
  3. var map1 map[string]string
  4. map1 =make(map[string]string,10)
  5. fmt.Println(map1)
  6. //第二种
  7. map2 := make(map[string]string)
  8. fmt.Println(map2)
  9. //第三种
  10. map3 := map[string]string{
  11. "11" : "one",
  12. "22" : "two",
  13. }
  14. fmt.Println(map3)

增删改查

map的增加和更新

  • map[“key”] = value
  • 如果key还没有,就是增加,如果key存在,就是修改

map删除

  • delete(map,”key”)
  • 如果key存在,删除该key-value ,如果key不存在,不操作,也不会报错

map查找

  1. map3 := map[string]string{
  2. "11" : "one",
  3. "22" : "two",
  4. }
  5. val,findRes := map3["11"]
  6. fmt.Println(val,findRes)
  7. //one true

map遍历

  1. //map遍历
  2. map4 := map[string]string{
  3. "11" : "one",
  4. "22" : "two",
  5. "33" : "大头",
  6. }
  7. for key, value := range map4 {
  8. fmt.Println(key,value)
  9. }
  10. 22 two
  11. 33 大头
  12. 11 one

map切片

切片的数据类型是map,我们称之为 map切片 : slice of map

  1. //map切片
  2. monsters := make([]map[string]string,2)
  3. fmt.Println(monsters, len(monsters), cap(monsters)) //[map[] map[]] 2 2
  4. monsters[0] = make(map[string]string)
  5. monsters[0]["name"] = "牛魔王"
  6. monsters[0]["age"] = "500"
  7. monsters[0]["sex"] = "男"
  8. monsters[1] = make(map[string]string)
  9. monsters[1]["name"] = "白骨精"
  10. monsters[1]["age"] = "300"
  11. monsters[1]["sex"] = "女"
  12. //切片append
  13. newMonster := make(map[string]string)
  14. newMonster["name"] = "人妖精"
  15. newMonster["age"] = "300"
  16. newMonster["sex"] = "未知"
  17. monsters = append(monsters,newMonster)
  18. fmt.Println(monsters)
  19. //[map[age:500 sex:男 name:牛魔王] map[name:白骨精 age:300 sex:女] map[name:人妖精 age:300 sex:未知]]

map排序

image.png

  1. //如果要按照map的key排序输出
  2. //1. 先将map的key放到切片中
  3. //2. 对切片排序
  4. //3. 遍历切片,按照key来输出map的值
  5. //key切片
  6. var keys []int
  7. for key := range mapz {
  8. keys = append(keys,key)
  9. }
  10. //排序
  11. sort.Ints(keys)
  12. fmt.Println("keys: ",keys)
  13. //输出
  14. for _,key := range keys {
  15. fmt.Println(mapz[key])
  16. }

使用细节

  1. map是引用类型,在一个函数接受map后,修改后会直接影响原来的map
  2. map的容量达到后,会自动扩容,不会发生panic,map能动态增长 key-value
  3. map的value经常使用 struct类型 更适合管理复杂数据