开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map: _map 切片】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/625/detail/9660
_map 切片
一、map 切片
基本介绍
切片的数据类型如果是 map,则我们称为 slice of map,map 切片,这样使用则 map 个数就可以动态变化了。(这是 map 切片最大的特点)
之前理解的切片的概念:切片可以存放一组数据,也可以是动态的数组,但是 map 也可以对应一个切片就也可以理解成动态的 map。切片的数据类型如果是 map ,[]int ,如果这个数据类型是 map,那他就是 map 切片,当使用的时候 map 的个数就可以动态的变化或增加,就使得更加的灵活,所以这个使用就更加的复杂。
案例演示
要求:使用一个 map 来记录 monster 的信息. name 和 age,(说明要用一个 map记录一个妖怪的名字和年龄)也就是说一个 monster(是妖怪的个数)对应一个 map ,并且妖怪的个数可以动态的增加 =>map 切片
代码演示:
首先新建一个文件夹,叫 map slice,之后新建一个文件 main.go
package main
import (
"fmt"
)
func main() {
//演示 map 切片的使用/*
要求:使用一个 map 来记录 monster 的信息 name 和 age,也就是说一个 monster 对应一个 map,并且妖怪的个数可以动态的增加 =>map 切片
*/
//1.声明一个 map 切片
(报错的原因)Var monsters :=[]map[string]string
(首先切片本身需要 make 一下才能使用)
monsters = make([]map[string]string, 2)
//准备放入两个妖怪
//2.增加第一个妖怪的信息
if monsters[0]== nil i
monsters[0] = make(map[string]string,2)
(这里分配 map 空间)
monsters[0][ "name"] =“牛魔王"
monsters[0]["age"] = “500”
(这里 500 是个字符串)
}
fmt.Println(monsters)
}
第一个 map 是牛魔王,第二个 map 再往里面放信息
第二次又往里面放信息:而且切片里面是两个妖怪,而且两个妖怪的信息是放在一个 map 里面的。
//1.声明一个 map 切片
var monsters [ ]map[string]string
monsters = make([]map[string]string, 2)
//准备放入两个妖怪
//2.增加第一个妖怪的信息
if monsters[0] == nil {
monsters[0] = make(map[string]string,2)
monsters[0][ "name"] =“牛魔王"
monsters[0]["age"] = "500"
}
if monsters[1]== nil {
monsters[1] = make(map[string]string,2)
monsters[1][ "name"] =“玉兔精”
monsters[["age"] = "400”
}
fmt.Println(monsters)
此时如果加上第三个妖怪,狐狸精,由于之前 make 的空间是两个,所以直接增加要报错。
if monsters[2]== nil {
monsters[2] = make(map[string]string,2)
monsters[2]["name"] =“狐狸精”
monsters[2]["age"]= "300”
}
monsters = make([]map[string]string, 3)
这里写 3 就可以运行。
//因为之前的写法越界所以报错。
//这里我们需要使用到切片的 append 函数,可以动态的增加 monster
//1.先定义个 monster 信息
newMonster := map[string]string{
"name" :“新的妖怿~火云邪神,
"age" :” 200”,
}
Monster = append(monsters, newMonster)
fmt.Println(monsters)
}
如果之后要动态增加只要 append 就可以执行。
这里就是通过了 map 切片来动态增加 map 这种数据类型。
//增加
if monsters[1]==nil{
monsters[1]=make(map[string]string)//必须map
monsters[1][""name"]=“狐狸精”
monsters[1]["age"] = "100"
}
//动态增加,再和前而一样方式增加,就会报错,使用 append
monster := map[string]string }
"name" :“玉免精。
"age" : "200",
}
Mothers= append(monsters, monster)
var monsters []map[string]string
monsters = make([]map [string]string, 2)