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 mainimport ( "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勇者的攻击力 99map[勇者的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: 2be: 2or: 1not: 1