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
发表回复