七叶笔记 » golang编程 » golang初级进阶(二):map详解

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]  

相关文章