Map2

Posted green-frog-2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Map2相关的知识,希望对你有一定的参考价值。

map增加和更新:

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

案例演示:

func main()

  cities := make(map[string]string)
  cities["no1"] = "北京"
  cities["no2"] = "天津"
  cities["no3"] = "上海"

  //因为 no3这个key已经存在,因此下面的这句话就是修改
  cities["no3"] = "上海~"
  fmt.Println(cities)


map删除:

说明:

delete(map, "key"), delete 是一个内置函数,如果key存在,就删除该key-value,如果key不存在,不操作,但是也不会报错。

func delete

  func delete(m map[Type]Type1, key Type)

    delete 内建函数按照指定的键将元素从映射中删除。 若 m 为 nil 或无此元素,delete 即为空操作。

案例演示:

func main()

  cities := make(map[string]string)
  cities["no1"] = "北京"
  cities["no2"] = "天津"
  cities["no3"] = "上海"

  //因为 no3这个key已经存在,因此下面的这句话就是修改
  cities["no3"] = "上海~"
  fmt.Println(cities)

  delete(cities, "no1")
  fmt.Println(cities)
  //当delete指定的key不存在时,删除不会操作,也不会报错
  delete(cities, "no4")
  fmt.Println(cities)

技术图片

细节说明:

1)如果我们要删除map的所有key,没有一个专门的方法一次删除,可以遍历一下key,逐个删除

2)或者 map = make(...),make一个新的,让原来的称为垃圾,被gc回收。

func main()
  cities := make(map[string]string)
  cities["no1"] = "北京"
  cities["no2"] = "天津"
  cities["no3"] = "上海"

  cities = make(map[string]string)
  fmt.Println(cities)

map查找:

案例演示:

func main()
  cities := make(map[string]string)
  cities["no1"] = "北京"
  cities["no2"] = "天津"
  cities["no3"] = "上海"

  val, ok := cities["no2"]
  if ok
    fmt.Printf("有no2 key 值为%v", val)
   else
    fmt.Printf("没有no2 key\\n")
  

对上面的代码的说明:

如果 cities 这个map中存在"no2",那么ok 就会返回true,否则返回false。

 

map遍历:

案例演示相对复杂的map遍历:该map的value 又是一个map

说明:map的遍历使用for-range的结构遍历

案例演示:

func main()

  //使用for-range遍历map
  cities := make(map[string]string)
  cities["no1"] = "北京"
  cities["no2"] = "天津"
  cities["no3"] = "上海"

  for k, v := range cities
    fmt.Printf("k=%v v=%v \\n", k, v)
  

  //使用for-range遍历一个结构比较复杂的map
  studentMap := make(map[string]map[string]string, 10)
  studentMap["stu01"] = make(map[string]string, 3)
  studentMap["stu01"]["name"] = "tom"
  studentMap["stu01"]["sex"] = "男"
  studentMap["stu01"]["address"] = "北京长安街"

  studentMap["stu02"] = make(map[string]string, 3) //这句话不能少
  studentMap["stu02"]["name"] = "mary"
  studentMap["stu02"]["sex"] = "女"
  studentMap["stu02"]["address"] = "北京东沙村"

  for k1, v1 := range studentMap
    fmt.Println("k1=",k1)
    for k2, v2 := range v1
      fmt.Printf("\\t k2=%v v2=%v \\n", k2, v2)
    
    fmt.Println()
  

 技术图片

map的长度:

func len

  func len(v Type) int

  len 内建函数返回 v 的长度,这取决于具体类型:

  数组:v 中元素的数量。
  数组指针:*v 中元素的数量(即使 v 为 nil)。
  切片或映射:v 中元素的数量;若 v 为 nil,len(v) 即为零。
  字符串:v 中字节的数量。
  信道:信道缓存中队列(未读取)元素的数量;若 v 为 nil,len(v) 即为零。


案例演示:fmt.Println(len(stus))

func main()

  //使用for-range遍历map
  cities := make(map[string]string)
  cities["no1"] = "北京"
  cities["no2"] = "天津"
  cities["no3"] = "上海"

  fmt.Println("cities 有", len(cities), "对 key-value")

  //使用for-range遍历一个结构比较复杂的map
  studentMap := make(map[string]map[string]string, 10)
  studentMap["stu01"] = make(map[string]string, 3)
  studentMap["stu01"]["name"] = "tom"
  studentMap["stu01"]["sex"] = "男"
  studentMap["stu01"]["address"] = "北京长安街"

  studentMap["stu02"] = make(map[string]string, 3) //这句话不能少
  studentMap["stu02"]["name"] = "mary"
  studentMap["stu02"]["sex"] = "女"
  studentMap["stu02"]["address"] = "北京东沙村"

  fmt.Println("studentMap 有", len(studentMap), "对 key-value")

技术图片

 

以上是关于Map2的主要内容,如果未能解决你的问题,请参考以下文章

Map2

使用 purrr::map2 具有所有变量排列的模型

如何利用Map2Shp进行快速格式转换

map2.0简单应用

在具有包含数据帧的列表列的小标题中,如何使用自定义函数包装 mutate(foo = map2(...))?

EL表达式遍历Map集合