map介绍
-
map
是key-value
数据结构,又称为字段或者关联数组。类似其它编程语言的集合。
基本语法
- var map的变量名
map
(关键字)[keyType]
valueType
1、key
可以是什么类型
golang
中的map
可以是多种类型,比如bool,数字,string,指针,channel(管道)
,还可以是只包含前面几个类型的 接口,结构体,数组,
通常是int
,string
-
slice map function
不可做为key
的数据类型。
2、valueType
可以是什么类型
valueType
的类型和key
基本一样,通常为:数字(整数,浮点数),string,map,struct
map的声明
var a map[string]string
var a map[string]int
var a map[int]string
//a 的key是string类型,value是map类型。
var a map[string]map[string]string
声明
是不会分配内存,初始化要用make
,分配内存后才能赋值和使用
。
var a map[string]string
//使用map前,需要先make,make的作用就是分配内存空间。
a = make(map[string]string, 10) //10代表10对k-v的空间
//key不可以重复,key相同的话,后面的覆盖前面
a["no1"] = "宋江"
a["no2"] = "吴用"
a["no1"] = "武松"
a["no3"] = "林冲"
//map中是无序的k-v
fmt.Println(a)
- 以上代码的说明
1、map在使用前一定要make。
2、map的key是不能重复的。相同的话,后面覆盖前面。
3、map的value可以相同。
4、map的key-value是无序的。
map的使用方式
1、方式1:先声明,再make,再赋值
//第一种方式: 先声明再 make
var a map[string]string
//使用map前,需要先make,make的作用就是分配内存空间。
a = make(map[string]string, 10) //10代表10对k-v的空间
//key不可以重复,key相同的话,后面的覆盖前面
a["no1"] = "宋江"
a["no2"] = "吴用"
a["no1"] = "武松"
a["no3"] = "林冲"
//map中是无序的k-v
fmt.Println(a)
2、方式2:声明的时候直接 make
//第二种方式 声明的时候 make 用到类型推导
cities := make(map[string]string)
cities["no1"] = "北京"
cities["no2"] = "天津"
cities["no3"] = "上海"
fmt.Println(cities)
3、方式3:声明的时候直接赋值
//第三种方式 声明,直接赋值 用到类型推导
heroes := map[string]string{
"hero1": "宋江",
"hero2": "林冲",
"hero3": "武松",
}
heroes["hero4"] = "卢俊义"
fmt.Println(heroes)
案例:
我们要存放三个学生的信息,每个学生有
name
和sexs
的信息
思咱:map [string]map[string]string
(一对多)
studentMap := make(map[string]map[string]string)
//value 类型是map,所以还要 make
studentMap["stu01"] = make(map[string]string, 3)
studentMap["stu01"]["name"] = "tom"
studentMap["stu01"]["sex"] = "男"
studentMap["stu01"]["add"] = "北京长安街"
studentMap["stu02"] = make(map[string]string, 3)
studentMap["stu02"]["name"] = "mary"
studentMap["stu02"]["sex"] = "女"
studentMap["stu02"]["add"] = "上海陆家嘴"
fmt.Println(studentMap)
fmt.Println(studentMap["stu02"])
fmt.Println(studentMap["stu02"]["add"])
map的增删改查操作
-
map
的增加和更新:
map["key"] = value
key
不存在就是增加,存在就是更新
有疑问加站长微信联系(非本文作者)