Golang——map集合初始化、键值操作、map作为函数参数的使用

  • map是一种无序的键值对集合,键是不允许重复的,map是通过hash实现的
  • map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值
  • 引用类型不能作为key

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名称[键]通过key获取值
value,ok := map[key]判断key是否存在
delete(map名称,键)通过key删除value

演示:

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)
	}
}

版权声明:本文为weixin_45477086原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。