Go语言基础——Map| 青训营

54 阅读2分钟

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。