🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
Go语言中map是一种特殊的数据结构,一种元素对(pair)的无序集合,pair对应一个key(索引)和一个value(值),所以这个结构也称为关联数组或字典。这是一种能够快速寻找值的理想机构,给定key,就可以迅速找到对应的value。 map是引用类型,可以使用如下方式声明: ``` var mapname map[keytype]valuetype ``` 其中: * mapname为map的变量名; * keytype为键类型; * valuetype是键对应的值类型 提示:[keytype]和valuetype之间允许有空格。 在声明的时候不需要知道map的长度,因为map是可以动态增长的,未初始化的map的值是nil,使用函数len()可以获取map中的pair的数目。 ##map容量 和数组不同,map可以根据新增的key-value动态的伸缩,因此它不存在固定长度或者最大限制,但是也可以选择标明map的初始容量capacity,格式如下: ``` make(map[keytype]valuetype, cap) ``` 当map增长到容量上限的时候,若再增加新的key-value,map的大小会自动加1,所以出于性能的考虑,对于大的map或者快速扩张的map,即使只是大概知道容量,也最好先标明。 ##用切片作为map的值 既然一个key只能对应一个value,而value又是一个原始类型,那么若是一个key要对应多个值咋办?例如,当我们要处理unix机器上的所有进程,以父进程(pid为整型)作为key,所有的子进程(以所有子进程的pid组成的切片)作为value。通过将value定义为[]int类型或者其他类型的切片,就可以优雅解决该问题,如下: ``` map1 := make(map[int][]int) map2 := make(map[int]*[]int) ``` ##map元素的删除和清空 ###使用delete()函数从map中删除键值对 ``` delete(map, 键) ``` ###清空map中的所有元素 Go语言中并没有为map提供任何清空所有元素定函数、方法。清空map的唯一方式就是重新make一个新的map。不用担心垃圾回收的效率,Go语言中的并行垃圾回收效率比写一个清空函数要高效很多。