golang初级进阶(二):map详解

目录

1. 定义map

2. map中值的curd(增删改查)

3. 遍历map

4. 定义map类型的切片

5. 定义切片类型的map

6. 按照顺序打印map

7. 查找字符串中重复出现的单词次数


1. 定义map

map 是一种无序的基于 key-value 的数据结构,Go 语言中的 map 是引用类型,必须初始化 才能使用。

定义map的两种方式:

    // 定义map 第一种通过make函数定义
	mapArr := make(map[string]string)
	mapArr["username"] = "张三"
	fmt.Println(mapArr) // map[username:张三]

	// 第二种定义方式
	mapArr2 := map[string]string{
		"username": "张三",
		"age":      "20",
		"sex":      "男",
	}
	fmt.Println(mapArr2) // map[age:20 sex:男 username:张三]

2. map中值的curd(增删改查)

    mapArr2 := map[string]string{
		"username": "张三",
		"age":      "20",
		"sex":      "男",
	}
	fmt.Println(mapArr2) // map[age:20 sex:男 username:张三]

	// map对象的增删改查
	mapArr2["code"] = "3715xx19xxxxxx84xx" // 新增属性
	mapArr2["username"] = "李四"             // 修改属性
	delete(mapArr2, "age")                 // 删除属性
	fmt.Println(mapArr2)                   // map[code:3715xx19xxxxxx84xx sex:男 username:李四]
	// 判断map中是否含有某值
	v, ok := mapArr2["age"]
	fmt.Println(ok, v) // ok 存在返回true,并返回v值;否者返回false,v为空

3. 遍历map

    mapArr2 := map[string]string{
		"username": "张三",
		"age":      "20",
		"sex":      "男",
	}
    // 遍历map
	for k, v := range mapArr2 {
		fmt.Printf("k=%v v=%v\n", k, v) // k=username v=李四;k=sex v=男;k=code v=3715xx19xxxxxx84xx;
	}

4. 定义map类型的切片

划重点,以后在项目中可能会经常见到

    // 定义map类型的切片 空map默认也是nil
	var userinfo1 = make([]map[string]string, 2, 2)
	// 第一种赋值方式
	if userinfo1[0] == nil {
		userinfo1[0] = make(map[string]string) // 要进行map初始化
		userinfo1[0]["username"] = "张三"        // 这样赋值,必须要进行上面代码的初始化
		userinfo1[0]["age"] = "20"
	}
	// 第二种赋值方式
	if userinfo1[1] == nil {
		userinfo1[1] = map[string]string{
			"username": "李四",
			"age":      "22",
		}
	}

	fmt.Println(userinfo1) // [map[age:20 username:张三] map[age:22 username:李四]]

5. 定义切片类型的map

划重点,以后在项目中可能会经常见到

    // 定义切片类型的map
	var userinfo2 = make(map[string][]string)
	userinfo2["hoddy"] = []string{
		"打篮球",
		"踢足球",
		"看电影",
	}
	userinfo2["eat"] = []string{
		"早饭",
		"午饭",
		"晚饭",
	}
	fmt.Println(userinfo2)

6. 按照顺序打印map

    // 按照顺序遍历map
	mapList := map[int]int{
		1:  20,
		10: 13,
		5:  11,
		18: 11,
		38: 123,
		56: 13,
	}
	fmt.Println(mapList) // 打印时数字自动排序了 map[1:20 5:11 10:13 18:11 38:123 56:13]
	for k, v := range mapList {
		fmt.Printf("%v--%v\n", k, v) // 1--20;10--13;5--11;18--11;38--123;56--13;
	}
	// 按照key进行由小到大的排序
	var key []int
	for k, _ := range mapList {
		key = append(key, k)
	}
	sort.Ints(key)
	for _, v := range key {
		fmt.Println(v, mapList[v]) // 1 20  5 11 ...
	}

7. 查找字符串中重复出现的单词次数

    // 查找how do you do 单词出现次数
	str := "how do you do"
	// 1. 先把所有单词提出来
	strArr := strings.Split(str, " ")
	fmt.Println(strArr) // [how do you do]
	// 2. 查找每个单词出现的次数
	count := make(map[string]int)
	for _, v := range strArr {
		count[v]++ // count[v] = count[v] + 1
	}
	fmt.Println(count) // map[do:2 how:1 you:1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值