go语言集合类型下

100 阅读3分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」。

0 环境

  • 系统环境:win10
  • 编辑器:vscode
  • go版本:gol.17.3

1 map

Go语言中,map 是一个无序集合,针对key-value键值对。写法类似是map[key]value,这里的意思是keyvalue值类型的定义。其中key对应键,value对应值。map中所有的Key都是相同类型,Value也是一样和数组类似,其中Keyvalue的类型可以相同或不同的,根据你需要的类型来。除此之外,key类型要支持==的比较运算符,才可以判断它是否存在(或者空key的问题),保证key的唯一性。

1 map声明、初始化

make(map(key)value)声明,需要自行添加key-value键值值,无初始化。而另一种既可以初始化(添加键值对),如map[key]value{key具体值: value具体值},也可以不添加键值对,如map[key]value{},注意:这里的大括号一定不能把它省略了。

image.png

2 获得、更新、删除 map

map的获取、更新和数组的赋值,更新类似,[]在=前,是更新,[]在=后面是取值。还有一点,该map是可以获取不存在的Key-Value键值对的,假如Key是不存在的,那么Value就返回该类型的零值,若是int类型,它的零值就是0。很多时候,先判断是否存在Key-Value键值对(先把它命名为标识值,它存在为true),然后再去操作。这个标识值需要我们单独去获取,如下面的图:很贴心给我们一个状识值,只要获取map值,在追加上第二个变量,就可以获取状态值了。对于删除map,只需delete(map,Key)即可。

image.png

image.png

3 map遍历

for range遍历后,返回两个值:keyvalue,若只返回一个值,那么就是key。别看遍历的结果是有序的,其实它是无序的,若想要有序的,先获取所有的key的值,进行排序,排好序后,在一个个读取key,获取value

func mapDemo3()  {
   name1 := map[string]int{"hi": 12}
   name1["hi1"] = 13
   name1["hi2"] = 14
   name1["hi3"] = 15
   name1["hi4"] = 16
   fmt.Println("name1 ==>", name1)
   for k, v := range name1 {
      fmt.Println("key ==>", k, "  v ==>", v)
   }

   for k1 := range name1 {
      fmt.Println(k1)
   }
}

image.png

4 获取map大小

len(map)map只有长度(键值对个数(1对 = 1),按对来算的,好比结婚一对新人代表一家人,不能在按两家人来算),还有和切片不一样的,没有容量一说,别搞混了。

总结

map创建的两种方式,make()map(){xxx:xxx} ==> 这里可以用空括号,就等于make()for range(使用goLand,快捷方式输入forr),一个返回值就是key,两个返回值就是keyvalue。还有就是获取空key,它返回的就是value类型的零值以及它的标识值(定义变量,第一个是value值,第二个变量就是标识值)的判断问题。以及map是无序的,需要自己排序key,在根据key,获取value