7. Go的map

Golang map详解

map的介绍

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

Go语言中map的定义语法如下:

map[KeyType]ValueType

其中:

  • KeyType:表示键的类型
  • ValueType:表示键对应的值的类型

map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:

make:用于slice、map和channel的初始化

示例如下所示:

// 方式1初始化
var userInfo = make(map[string]string)
userInfo["userName"] = "zhangsan"
userInfo["age"] = "20"
userInfo["sex"] = "男"
fmt.Println(userInfo)
fmt.Println(userInfo["userName"])
// 创建方式2,map也支持声明的时候填充元素
var userInfo2 = map[string]string {
    "username":"张三",
    "age":"21",
    "sex":"女",
}
fmt.Println(userInfo2)

遍历map

使用for range遍历

// 遍历map
for key, value := range userInfo2 {
    fmt.Println("key:", key, " value:", value)
}

判断map中某个键值是否存在

我们在获取map的时候,会返回两个值,也可以是返回的结果,一个是是否有该元素

// 判断是否存在,如果存在  ok = true,否则 ok = false
value, ok := userInfo2["username2"]
fmt.Println(value, ok)

使用delete()函数删除键值对

使用delete()内建函数从map中删除一组键值对,delete函数的格式如下所示

delete(map 对象, key)

其中:

  • map对象:表示要删除键值对的map对象
  • key:表示要删除的键值对的键

示例代码如下

// 删除map数据里面的key,以及对应的值
delete(userInfo2, "sex")
fmt.Println(userInfo2)

元素为map类型的切片

我们想要在切片里面存放一系列用户的信息,这时候我们就可以定义一个元素为map类型的切片

// 切片在中存放map
var userInfoList = make([]map[string]string, 3, 3)
var user = map[string]string{
    "userName": "张安",
    "age": "15",
}
var user2 = map[string]string{
    "userName": "张2",
    "age": "15",
}
var user3 = map[string]string{
    "userName": "张3",
    "age": "15",
}
userInfoList[0] = user
userInfoList[1] = user2
userInfoList[2] = user3
fmt.Println(userInfoList)

for _, item := range userInfoList {
    fmt.Println(item)
}

值为切片类型的map

我们可以在map中存储切片

// 将map类型的值
var userinfo = make(map[string][]string)
userinfo["hobby"] = []string {"吃饭", "睡觉", "敲代码"}
fmt.Println(userinfo)

示例

统计字符串中单词出现的次数

// 写一个程序,统计一个字符串中每个单词出现的次数。比如 "how do you do"
var str = "how do you do"
array := strings.Split(str, " ")
fmt.Println(array)
countMap := make(map[string]int)
for _, item := range array {
    countMap[item]++
}
fmt.Println(countMap)
package main

import (
	"fmt"
	"strings"
)

func main() {
	// 创建方式1
	var userInfo = make(map[string]string)
	userInfo["userName"] = "zhangsan"
	userInfo["age"] = "20"
	userInfo["sex"] = "男"
	fmt.Println(userInfo)
	fmt.Println(userInfo["userName"])

	// 创建方式2,map也支持声明的时候填充元素
	var userInfo2 = map[string]string{
		"username": "张三",
		"age":      "21",
		"sex":      "女",
	}
	fmt.Println(userInfo2)

	// 遍历map
	for key, value := range userInfo2 {
		fmt.Println("key:", key, " value:", value)
	}

	// 判断是否存在,如果存在  ok = true,否则 ok = false
	value, ok := userInfo2["username2"]
	fmt.Println(value, ok)

	// 删除map数据里面的key,以及对应的值
	delete(userInfo2, "sex")
	fmt.Println(userInfo2)

	// 切片在中存放map
	var userInfoList = make([]map[string]string, 3, 3)
	var user = map[string]string{
		"userName": "张安",
		"age": "15",
	}
	var user2 = map[string]string{
		"userName": "张2",
		"age": "15",
	}
	var user3 = map[string]string{
		"userName": "张3",
		"age": "15",
	}
	userInfoList[0] = user
	userInfoList[1] = user2
	userInfoList[2] = user3
	fmt.Println(userInfoList)

	for _, item := range userInfoList {
		fmt.Println(item)
	}

	// 将map类型的值
	var userinfo = make(map[string][]string)
	userinfo["hobby"] = []string {"吃饭", "睡觉", "敲代码"}
	fmt.Println(userinfo)

	// 写一个程序,统计一个字符串中每个单词出现的次数。比如 "how do you do"
	var str = "how do you do"
	array := strings.Split(str, " ")
	fmt.Println(array)
	countMap := make(map[string]int)
	for _, item := range array {
		countMap[item]++
	}
	fmt.Println(countMap)


}

效果

[Running] go run "/root/godemo/test.go"
map[age:20 sex:男 userName:zhangsan]
zhangsan
map[age:21 sex:女 username:张三]
key: username  value: 张三
key: age  value: 21
key: sex  value:false
map[age:21 username:张三]
[map[age:15 userName:张安] map[age:15 userName:2] map[age:15 userName:3]]
map[age:15 userName:张安]
map[age:15 userName:2]
map[age:15 userName:3]
map[hobby:[吃饭 睡觉 敲代码]]
[how do you do]
map[do:2 how:1 you:1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值