「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」。
0 环境
- 系统环境:win10
- 编辑器:vscode
- go版本:gol.17.3
1 map
Go语言中,map 是一个无序集合,针对key-value键值对。写法类似是map[key]value,这里的意思是key和value值类型的定义。其中key对应键,value对应值。map中所有的Key都是相同类型,Value也是一样和数组类似,其中Key和value的类型可以相同或不同的,根据你需要的类型来。除此之外,key类型要支持==的比较运算符,才可以判断它是否存在(或者空key的问题),保证key的唯一性。
1 map声明、初始化
make(map(key)value)声明,需要自行添加key-value键值值,无初始化。而另一种既可以初始化(添加键值对),如map[key]value{key具体值: value具体值},也可以不添加键值对,如map[key]value{},注意:这里的大括号一定不能把它省略了。
2 获得、更新、删除 map
map的获取、更新和数组的赋值,更新类似,[]在
=前,是更新,[]在=后面是取值。还有一点,该map是可以获取不存在的Key-Value键值对的,假如Key是不存在的,那么Value就返回该类型的零值,若是int类型,它的零值就是0。很多时候,先判断是否存在Key-Value键值对(先把它命名为标识值,它存在为true),然后再去操作。这个标识值需要我们单独去获取,如下面的图:很贴心给我们一个状识值,只要获取map值,在追加上第二个变量,就可以获取状态值了。对于删除map,只需delete(map,Key)即可。
3 map遍历
for range遍历后,返回两个值:key,value,若只返回一个值,那么就是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)
}
}
4 获取map大小
len(map),map只有长度(键值对个数(1对 = 1),按对来算的,好比结婚一对新人代表一家人,不能在按两家人来算),还有和切片不一样的,没有容量一说,别搞混了。
总结
map创建的两种方式,make(),map(){xxx:xxx} ==> 这里可以用空括号,就等于make(),for range(使用goLand,快捷方式输入forr),一个返回值就是key,两个返回值就是key,value。还有就是获取空key,它返回的就是value类型的零值以及它的标识值(定义变量,第一个是value值,第二个变量就是标识值)的判断问题。以及map是无序的,需要自己排序key,在根据key,获取value。