Go 语言集合(Map)
在 Go 语言中,Map 是一种无序的键值对集合,也称为字典、映射或关联数组。它提供了一种快速查找和检索值的方式,类似于其他编程语言中的哈希表或字典。Map 中的每个键都是唯一的,且与一个值关联。
和数组不同,Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。这个特性使得它适合用于存储无序的数据。Map 是一种集合,所以你可以像迭代数组和切片那样迭代它。不过由于 map 是无序的,所以我们 无法决定它的返回顺序,这是因为 map 是使用 hash 表来实现的。
提示
本文所有示例代码可在 GitHub 下载。
定义和初始化
你可以使用 map
关键字来声明一个集合,格式如下:
var map_variable map[key_data_type]value_data_type
例如声明一个名为 scores 的集合,键和值的类型分别为 string
和 int
,分别代表学生名字和成绩:
var scores map[string]int
不过,此时的 scores 是一个空的(nil
)集合,还不能使用。你需要通过 make()
函数初始化该集合,或者直接对其进行初始化。
你可以在声明集合的同时进行初始化,例如:
scores := map[string]int{
"Alice": 90,
"Bob": 85,
"Carol": 95,
}
如果你还没有准备好集合的数据,也可以使用内建函数 make()
对集合进行初始化,格式如下:
map_variable = make(map[key_data_type]value_data_type)
例如:
var scores map[string]int
scores = make(map[string]int)
初始化之后就可以通过如下方式为该集合添加元素:
scores["Alice"] = 90
scores["Bob"] = 85
scores["Carol"] = 95
注意:如果键不存在,会添加一个键值对;如果键已存在,则修改该键的值。
使用集合
下面通过一个实例,演示如何创建、添加、修改以及遍历集合。代码如下:
map_example_01.go
package main
import "fmt"
func main() {
var scores map[string]int
/* 创建集合 */
scores = make(map[string]int)
/* 添加初始数据 */
scores = map[string]int{
"Alice": 90,
"Bob": 85,
"Carol": 95,
}
/* 插入新数据 */
scores["David"] = 80
/* 修改数据 */
scores["Bob"] = 70
/* 遍历集合,使用 key 输出 map 值 */
for name := range scores {
fmt.Printf("%8s : %d\n", name, scores[name])
}
}
以上实例运行结果 为:
Alice : 90
Bob : 70
Carol : 95
David : 80
删除键值对
使用 delete()
函数可以删除集合中的元素,参数为 map 和其对应的 key。
请看下面实例:
map_example_02.go
package main
import "fmt"
func main() {
var scores map[string]int
/* 创建集合 */
scores = make(map[string]int)
/* 添加初始数据 */
scores = map[string]int{"Alice": 90, "Bob": 85, "Carol": 95}
/* 遍历集合,使用 key 输出 map 值 */
for name := range scores {
fmt.Printf("%8s : %d\n", name, scores[name])
}
fmt.Println("----------------")
/* 删除数据 */
delete(scores, "Bob")
/* 再次输出 */
for name := range scores {
fmt.Printf("%8s : %d\n", name, scores[name])
}
}
以上实例运行结果为:
Alice : 90
Bob : 85
Carol : 95
----------------
Alice : 90
Carol : 95