映射
大体上来说,Go 中的映射是一个哈希表,是键值对的集合。 映射中所有的键都必须具有相同的类型,它们的值也是如此。 不过,可对键和值使用不同的类型。 例如,键可以是数字,值可以是字符串。 若要访问映射中的特定项,可引用该项的键。
声明和初始化映射
创建一个包含学生姓名和年龄的映射:
package main
import "fmt"
func main() {
studentsAge := map[string]int{
"john": 32,
"bob": 31,
}
fmt.Println(studentsAge)
}
运行上述代码时,你会看到以下输出:
map[bob:31 john:32]
映射是动态的。 创建项后,可添加、访问或删除这些项。 让我们来了解这些操作。
添加项
如果不想使用项来初始化映射,可使用内置函数 make() 在上一部分创建切片。 可使用以下代码创建空映射(注意与studentsAge := map[string]int得到的nil映射区分开):
studentsAge := make(map[string]int)
studentsAge["john"] = 32
studentsAge["bob"] = 31
fmt.Println(studentsAge)
删除项
若要从映射中删除项,请使用内置函数 delete()。 下例演示了如何从映射中删除项:
package main
import "fmt"
func main() {
studentsAge := make(map[string]int)
studentsAge["john"] = 32
studentsAge["bob"] = 31
delete(studentsAge, "john")
fmt.Println(studentsAge)
}
运行代码时,你会获得以下输出:
map[bob:31]
映射中的循环
使用range即可遍历整个映射。
请注意可如何将键和值信息存储在不同的变量中。 在本例中,我们将键保存在 name 变量中,将值保存在 age 变量中。 因此,range 会首先生成项的键,然后再生成该项的值。
for name, age := range studentsAge {
fmt.Printf("%s\t%d\n", name, age)
}
可使用 _ 变量忽略其中任何一个。