映射 map
,又称为希哈表,是一种数据结构,用于存储一系列无序的键值对。映射里基于键来存储值。映射功能强大的地方是,能够基于键快速检索数据。键就像索引一样,指向与该键关联的值。
声明和初始化
Go 语言中有很多种方法可以创建并初始化映射,可以使用内置的 make
函数,也可以使用映射字面量。
// 创建一个映射,键的类型是 string,值的类型是 int
dict := make(map[string]int)
// 创建一个映射,键和值的类型都是 string
// 使用两个键值对初始化映射
dict := map[string]string{"Red": "#da1337", "Orange": "#e95a22"}
创建映射时,更常用的方法是使用映射字面量。映射的初始长度会根据初始化时指定的键值对的数量来确定。
使用 map
我们已经见过可以使用 val = dict[key]
的方法获取 key
对应的值 val
。如果 dict
中不存在 key
, val
就是一个值类型的空值。可使用下面方法判断 map 中是否存在键 key:
_, ok := dict[key] // 如果 key 存在则 ok 为 true,否则为 false
要想从映射 dict
中删除 key
,可以直接 delete(dict, key)
就可以。但是如果 key
不存在,该操作不会产生错误。
迭代映射
迭代映射里的所有值和迭代数组或切片一样,使用关键字 range,但对映射来说,range 返回的不是索引和值,而是键值对。
// 创建一个映射,存储颜色以及颜色对应的十六进制代码
colors := map[string]string{
"AliceBlue": "#f0f8ff",
"Coral": "#ff7F50",
"DarkGray": "#a9a9a9",
"ForestGreen": "#228b22",
}
// 显示映射里的所有颜色
for key, value := range colors {
fmt.Printf("Key: %s Value: %s\n", key, value)
}
注意 map
的迭代顺序是不确定的,并且不同的哈希函数实现可能导致不同的遍历顺序。如果要按顺序遍 key/value
对,我们必须显式地对 key
进行排序。