map的创建:map是一种无序的键值对集合,键是不允许重复的,map是通过hash实现的map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值
格式1:
var map名称 map[key的类型]value的类型
格式2:
map名称 := map[key的类型]value的类型{}
格式3:
map名称 := make(map[key的类型]value的类型)
演示:
func mapDemo() {
var m map[int]string
m1 := map[int]string{}
m2 := make(map[int]string)
fmt.Println(m)
fmt.Println(m1)
fmt.Println(m2)
}
map的初始化:
格式1:
var map名称 map[key的类型]value的类型 = map[key的类型]value的类型{key:value,key:value}
格式2:
map名称 := map[key的类型]value的类型{key:value,key:value}
格式3:
map名称 := make(map[key的类型]value的类型) map名称 [key] = value
演示:
func mapDemo() {
var m map[string]string = map[string]string{"打野": "露娜", "中路": "不知火舞", "射手": "马可波罗"}
m1 := map[string]string{"打野": "露娜", "中路": "不知火舞", "射手": "马可波罗"}
m2 := make(map[string]string)
m2["打野"] = "露娜"
m2["中路"] = "不知火舞"
m2["射手"] = "马可波罗"
fmt.Println(m)
fmt.Println(m1)
fmt.Println(m2)
}
map键值操作:
| 格式 | 作用 |
|---|---|
| map名称[键] | 通过key获取值 |
| 变量1,变量2 := map名称[键] | 通过key获取值时,判断是否存在 |
| delete(map名称,键) | 通过key删除value |
演示:
func mapDemo02() {
m := map[string]string{"打野": "露娜", "中路": "不知火舞", "射手": "马可波罗"}
fmt.Println(m["打野"])
value, key := m["打野2"]
if key {
fmt.Println(value)
} else {
fmt.Println("key不存在")
}
for key, value := range m {
fmt.Println(key, value)
}
delete(m, "打野")
fmt.Println(m)
}
map作为函数参数:
在函数中修改map的值,会影响到原来的map
创建格式格式:
func 函数名 (map){
函数体
}
调用格式:
函数名(map)
演示:
func main() {
m := map[string]string{"打野": "露娜", "中路": "不知火舞", "射手": "马可波罗"}
mapDemo03(m)
}
func mapDemo03(m map[string]string) {
fmt.Println("修改前", m)
delete(m, "打野")
fmt.Println("修改后", m)
}
统计字母出现的次数:
思路:
定义map,键盘录入的字母作为map的key,统计的次数作为map的value,循环遍历
func mapDemo04() {
fmt.Println("请输入要统计的字母:")
// 定义统计次数的变量
var str string
fmt.Scan(&str)
m := make(map[byte]int)
for i := 0; i < len(str); i++ {
// 定义变量s作为map的key
s := str[i]
// 通过key获取值 int类型初始值为0,相同则+1作为新的value
m[s] += 1
}
fmt.Println("统计的字符次数为:nn")
// 遍历
for key, value := range m {
fmt.Printf("%c:%dn", key, value)
}
}



