Go 语言Map详解
Map 是 Go 中的一种内置类型,用于存储键值对。其中 Map中的键是唯一的,一个键映射一个值。键是一个对象,用于在以后检索值。给定一个键和一个值,我们可以将值存储在 Map 对象中。值存储后,就可以使用其对应的键检索该值。
如何创建Map?
必须使用make函数来创建map。可以通过将键和值的类型传递给make函数来创建映射。语法如下
make(map[type of key]type of value)
例如
employeeSalary := make(map[string]int)
上面代码创建了一个名为employeeSalary 的map,其键和值对应的类型分别为 string 和 int。
下面我们看一个完整的示例
package main
import (
"fmt"
)
func main() {
employeeSalary := make(map[string]int)
fmt.Println(employeeSalary)
}
上述代码执行结果如下
map[]
由于我们没有向 map 中添加任何元素,因此它是空的。
在 map 中添加元素
向 map 添加新元素的语法与向数组中添加新元素的语法相同。下面的程序向 employeeSalary map中添加了一些新员工。
package main
import (
"fmt"
)
func main() {
employeeSalary := make(map[string]int)
employeeSalary["steve"] = 12000
employeeSalary["jamie"] = 15000
employeeSalary["mike"] = 9000
fmt.Println("employeeSalary map 内容:", employeeSalary)
}
上述代码执行结果如下
employeeSalary map 内容: map[jamie:15000 mike:9000 steve:12000]
我们增加了三名员工steve,jamie和mike以及与他们相对应的工资。
也可以在声明期间对 map进行初始化
employeeSalary := map[string]int { "steve": 12000, "jamie": 15000, } employeeSalary["mike"] = 9000 fmt.Println("employeeSalary map 内容:", employeeSalary)
其最后打印出来的结果是相同的。
没有必要只将字符串类型作为键。所有可比较的类型,例如 boolean、integer、float、complex、string都可以作为 map的键。甚至用户定义的类型(如结构体)也可以作为键。
检索 map 中的值
现在我们已经向 Map 中添加了一些元素。接下来让我们学习如何检索它们。map[key]
是检索 Map 元素的语法。
package main
import (
"fmt"
)
func main() {
employeeSalary := map[string]int{
"steve": 12000,
"jamie": 15000,
"mike": 9000,
}
employee := "jamie"
salary := employeeSalary[employee]
fmt.Println(employee,"的薪资是 ", salary)
}
上述代码执行结果如下
jamie 的薪资是 15000
如果元素不存在会发生什么?Map 将返回该元素类型的零值。
对于上述示例中的employeeSalary。我们试图访问一个不存在的元素,那么int类型的零值,0,将被返回。
package main
import (
"fmt"
)
func main() {
employeeSalary := map[string]int{
"steve": 12000,
"jamie": 15000,
}
fmt.Println("jiyik 的薪资是 ", employeeSalary["jiyik"])
}
上述代码执行结果如下
jiyik 的薪资是 0
迭代 map 中的所有元素
for 循环的 range 形式可用于迭代 map 中的所有元素。
package main
import (
"fmt"
)
func main() {
employeeSalary := map[string]int{
"steve": 12000,
"jamie": 15000,
"mike": 9000,
}
fmt.Println("map 的内容如下:")
for key, value := range employeeSalary {
fmt.Printf("employeeSalary[%s] = %d\n", key, value)
}
}
上述代码执行结果如下
map 的内容如下:
employeeSalary[steve] = 12000
employeeSalary[jamie] = 15000
employeeSalary[mike] = 9000
从 map 中删除元素
delete() 函数用于从 map 中删除元素。它需要map和要删除的相应键。
delete() 函数不返回任何值。
package main
import (
"fmt"
)
func main() {
employeeSalary := map[string]int{
"steve": 12000,
"jamie": 15000,
"mike": 9000,
}
fmt.Println("删除之前的map:", employeeSalary)
delete(employeeSalary, "steve")
fmt.Println("删除之后的map:", employeeSalary)
}
上述代码执行结果如下
删除之前的map: map[jamie:15000 mike:9000 steve:12000]
删除之后的map: map[jamie:15000 mike:9000]