map
1. 概念:Go 语言中 map 是一种非凡的数据结构,一种元素对(pair)的无序汇合,蕴含一个 key 和 value 值,被称为关联数组或字典。
2. 初始化
3. 判空
4. 遍历: 个别遍历与条件遍历
5. 删除
6. 查 若在 map 中找不到某个 key,则返回 key 对应类型的零值,e.g. int 对应 0,string 对应空,bool
7. 元素类型为 map 的 slice
8. 元素类型为 slice 的 map
练习题: 统计 how do you do 中每个单词呈现的次数
package main
import ("fmt")
func main() {
// 初始化
var a = make(map[string]int)
a["勇者的等级"] = 10 // 赋值
a["勇者的 HP"] = 107
a["勇者的 MP"] = 55
a["勇者的攻击力"] = 99
a["勇者的防御力"] = 99
fmt.Println(a)
// 判空
// 常设变量 ok 来判空
v, ok := a["勇者的颜值"]
if !ok {fmt.Println("无此属性")
} else {fmt.Println(v)
}
fmt.Println(a["勇者的颜值"]) // 查无此 key,则返回值为 int 的零值
// 遍历
//1. 个别遍历 for range
for v, k := range a {fmt.Println(v, k)
}
//2. 条件遍历
// 步骤: 将 key 存入切片,用 sort 对该切片进行排序,再存入 map,最初遍历
// 删除
fmt.Println(a)
delete(a, "勇者的防御力")
fmt.Println(a)
// 元素类型为 map 的 slice
A := make([]map[string]int, 4, 4)
fmt.Println(A)
A[0] = a
fmt.Println(A)
// 元素类型为 slice 的 map
B := make(map[string][]string, 2)
fmt.Println(B)
B["援救公主的壮士"] = []string{"莱安", "杜鲁特"}
fmt.Println(B)
//vs code 下如果不对外部的 slice 或 map 进行初始化,则会报错
// 练习题对 "to be or not to be" 的每个单词呈现的次数进行统计
C := make(map[string]string)
C["单词 1"] = "to"
C["单词 2"] = "be"
C["单词 3"] = "or"
C["单词 4"] = "not"
C["单词 5"] = "to"
C["单词 6"] = "be"
count1 := 0
count2 := 0
count3 := 0
count4 := 0
for _, k := range C {
if k == "to" {count1++} else if k == "be" {count2++} else if k == "or" {count3++} else if k == "not" {count4++}
}
fmt.Println(C)
fmt.Println("to:", count1)
fmt.Println("be:", count2)
fmt.Println("or:", count3)
fmt.Println("not:", count4)
}
运行后果:
map[勇者的 HP:107 勇者的 MP:55 勇者的攻击力:99 勇者的等级:10 勇者的防御力:99]
无此属性
0
勇者的防御力 99
勇者的等级 10
勇者的 HP 107
勇者的 MP 55
勇者的攻击力 99
map[勇者的 HP:107 勇者的 MP:55 勇者的攻击力:99 勇者的等级:10 勇者的防御力:99]
map[勇者的 HP:107 勇者的 MP:55 勇者的攻击力:99 勇者的等级:10]
[map[] map[] map[] map[]]
[map[ 勇者的 HP:107 勇者的 MP:55 勇者的攻击力:99 勇者的等级:10] map[] map[] map[]]
map[]
map[援救公主的壮士:[ 莱安 杜鲁特]]
map[单词 1:to 单词 2:be 单词 3:or 单词 4:not 单词 5:to 单词 6:be]
to: 2
be: 2
or: 1
not: 1