map 是一种特殊的数据结构:一种元素对(pair)的无序集合,pair 的一个元素是 key,对应的另一个元素是 value,所以这个结构也称为关联数组或字典。这是一种快速寻找值的理想结构:给定 key,对应的 value 可以迅速定位。
声明
map 是引用类型,可以使用如下声明:
var map1 map[keytype]valuetype
例如
var map1 map[string]int
keytype 和 valuetype 之间允许有空格
在声明的时候不需要知道 map 的长度,map 是可以动态增长的。
未初始化的 map 的值是 nil。
初始化
可以用以下方式来初始化
var map1 = make(map[keytype]valuetype)
map1 := make(map[keytype]valuetype)
注意,不要使用new来初始化,要用make来构造map
容量
和数组不同,map 可以根据新增的 key-value 对动态的伸缩,因此它不存在固定长度或者最大限制。但是你也可以选择标明 map 的初始容量。
make(map[keytype]valuetype, cap)
例如
map2 := make(map[string]float32, 100)
当 map 增长到容量上限的时候,如果再增加新的 key-value 对,map 的大小会自动加 1。所以出于性能的考虑,对于大的 map 或者会快速扩张的 map,即使只是大概知道容量,也最好先标明。
map类型切片
如果想使用map类型切片,需要使用两次make()函数,第一次分配切片,第二次分配 切片中每个 map 元素
map的排序
map 默认是无序的,不管是按照 key 还是按照 value 默认都不排序。
map 的排序,需要将 key(或者 value)拷贝到一个切片,再对切片排序(使用 sort 包),然后可以使用切片的 for-range 方法打印出所有的 key 和 value。