Map

24 阅读1分钟

map是用于键值对查找的数据结构

//声明
var map1 map[int]string
//声明并初始化
map1 := map[int]string{1:"asd",2:"sfa",3:"avde"}
map1 := make(map[int]string)

1)map和slice,channel一样,是引用类型
2)key必须是可以用==,!=比较的类型,切片,函数,结构体都不能作为key,但可以作为value
3)map声明时不用声明长度,map的大小是可以动态增长的,可以由len(map1)得到map的pair数
map1 := make(map[int]float32,10)//声明容量的写法

删除

delete(map1,key1)进行删除,如果key1不存在,该操作不会产生错误。

判断key对应的值是否为存在

可以使用 val1 = map1[key1] 的方法获取 key1 对应的值 val1。如果 map 中不存在 key1val1 就是一个值类型的空值
而也有第二种情况, key1的值存在,它的值就是空值,但是这两种情况下map[key]都会返回nil
利用如下方法判断键对应的值是否存在

//若val存在,则ok为true,反之false
val, ok = map1[key]
//只关心val是否存在的话也可以这么写
_, ok := map1[key]
//和if搭配使用
if _,ok := map1[key];ok{
...
}

使用for-range遍历map

//
for val,key := range map1{
...
}
//只关心val的值,这么写
for val,_ := range map1{
...
}
//只关心键,这么写
for key := range map1{
...
}

注意,map中存储的键值对是无序的,两次遍历打印同样的map,键值对的顺序会不一样,如果要排序,就先把key或者value拷贝到一个切片里,在切片里进行排序

建立map类型的切片

使用两次make,第一次make出切片(map类型),第二次往切片里make新的map1,map2,map3...