无序键是不允许重复
map的创建:
格式1:
var map名称 map[key的类型]value的类型
格式2:
map名称 := map[key的类型]value的类型{}
格式3:
map名称 := make(map[key的类型]value的类型)
演示:
func main() {
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 main() {
//var m map[string]string = map[string]string{"打野": "露娜", "中路": "不知火舞", "射手": "马可波罗"}
// 可以简写
var m = 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名称[键]value,ok := map[key]delete(map名称,键)
演示:
func main() {
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{"打野": "露娜", "中路": "不知火舞", "射手": "马可波罗"}
mapDemo(m)
fmt.Println("修改后main中打印:", m)
}
func mapDemo(m map[string]string) {
fmt.Println("修改前:", m)
delete(m, "打野")
fmt.Println("修改后mapDemo中打印:", m)
}
输出:
修改前: map[中路:不知火舞 射手:马可波罗 打野:露娜]
修改后mapDemo中打印: map[中路:不知火舞 射手:马可波罗]
修改后main中打印: map[中路:不知火舞 射手:马可波罗]
统计字母出现的次数:
思路:
定义map,键盘录入的字母作为map的key,统计的次数作为map的value,循环遍历
func mapDemo() {
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("统计的字符次数为:\n\n")
// 遍历
for key, value := range m {
fmt.Printf("%c:%d\n", key, value)
}
}