非零基础自学Golang
文章目录
- 非零基础自学Golang
- 第6章 Go语言内置容器
- 6.3 映射
- 6.3.1 声明映射
- 6.3.2 初始化映射
- 6.3.3 遍历映射
- 6.3.4 从映射中删除键值对
第6章 Go语言内置容器
6.3 映射
映射(map)是一种无序的键值对的集合,map的键类似于索引,指向数据的值。
当我们的程序中需要存放有关联关系的数据时,往往就会用到map。
例如,我们可以将国家中文名和其英文名关联起来,生成如下映射:
country := map[string]string{
"中国":"China",
"美国":"America",
"日本":"Japan",
}
6.3.1 声明映射
map的声明格式如下:
var map [键类型]值类型
如果我们需要建立一个学生和其成绩的对应关系,样例如下:
[ 动手写 6.3.1 ]
package main
import "fmt"
func main() {
var studentScoreMap map[string]int
fmt.Println(studentScoreMap)
}
运行结果
6.3.2 初始化映射
【1】在声明的同时初始化
我们可以在声明map的同时对其进行初始化:
[ 动手写 6.3.2 ]
package main
import "fmt"
func main() {
var studentScoreMap = map[string]int{
"Tom": 80,
"Ben": 85,
"Peter": 90,
}
fmt.Println(studentScoreMap)
}
运行结果
【2】使用make() 函数初始化
与切片的初始化类似,map也可以使用make()函数来进行初始化,格式如下:
make(map[键类型]值类型,map容量)
注意:使用make()函数初始化map时可以不指定map容量,但是对于map的多次扩充会造成性能损耗。
cap()函数只能用于获取切片的容量,无法获得map的容量,因此可以通过len()函数获取map的当前长度。
[ 动手写 6.3.3]
package main
import "fmt"
func main() {
var studentScoreMap map[string]int
studentScoreMap = make(map[string]int)
studentScoreMap["Tom"] = 80
studentScoreMap["Ben"] = 85
studentScoreMap["Peter"] = 90
fmt.Println("map 长度为: ", len(studentScoreMap))
fmt.Println(studentScoreMap)
}
运行结果
6.3.3 遍历映射
map的遍历主要通过for循环来完成,遍历时可同时获得map的键和值。
[ 动手写 6.3.4]
package main
import "fmt"
func main() {
var studentScoreMap map[string]int
studentScoreMap = make(map[string]int)
studentScoreMap["Tom"] = 80
studentScoreMap["Ben"] = 85
studentScoreMap["Peter"] = 90
for k, v := range studentScoreMap {
fmt.Println(k, v)
}
}
运行结果
若只想遍历键,for循环可改写成如下形式:
for k := range studentScoreMap {
fmt.Println(k)
}
运行结果
若只想遍历值,for循环可改写成如下形式:
for _, v := range studentScoreMap {
fmt.Println(v)
}
运行结果
6.3.4 从映射中删除键值对
Go语言通过delete()函数来对map中的指定键值对进行删除操作,delete()函数格式如下:
delete(map,键)
其中map为要删除的map实例,键为map键值对中的键。
[ 动手写 6.3.5]
package main
import "fmt"
func main() {
var studentSroreMap map[string]int
studentSroreMap = make(map[string]int)
studentSroreMap["Tom"] = 80
studentSroreMap["Ben"] = 85
studentSroreMap["Peter"] = 90
delete(studentSroreMap, "Tom")
fmt.Println(studentSroreMap)
}
运行结果
注意:delete()函数会直接删除指定的键值对,而不是仅仅删除键或值。
另外,Go语言没有为map提供清空所有元素的方法,想要清空map的唯一方法就是重新定义一个新的map。