map
-
概念
map是key-value数据结构,又称为字段或者关联数组,类似其他编程语言的集合
-
声明
var 变量名 map[keytype]valuetype
- 在使用map之前,需要先make,make的作用就是给map分配数据空间:
var maptest map[string]string maptest = make(map[string]string, 10)
-
key可以是什么类型(通常为int和string):
- bool
- 数字
- string
- 指针
- channel
- 还可以是只包含上面几种类型的接口、结构体和数组
-
使用方式:
- 先声明,然后make分配空间
var maptest map[string]string maptest = make(map[string]string, 10)
- 直接使用make声明并初始化
maptest := make(map[string]string) // 虽然没有指定大小,但是使用的时候,不受大小的限制。
- 直接声明赋值
var maptest map[string]string = map[string]string { "key1": "value1", "key2": "value2", }
- 直接类型推倒声明赋值
maptest := map[string]string { "key1": "value1", "key2": "value2", }
-
map的增删改查操作
- 增加和更新
mapdemo := make(map[string]string) mapdemo["key1"] = "value1" // key不存在时,增加 mapdemo["key1"] = "value2" // key存在时,修改
-
删除
- 删除单个
mapdemo := make(map[string]string) mapdemo["key1"] = "value1" delete(mapdemo,"key1") // 如果key不存在,不操作,也不报错
- 删除全部
// 没有单独的方法可以一次性删除所有的值,可以遍历+delete()方法删除所有 // 还可以 map = make(...), make一个信道map,让原来的成为垃圾,被gc回收 mapdemo := make(map[string]string) mapdemo["key1"] = "value1" mapdemo["key2"] = "value2" mapdemo = make(map[string]string) // 直接make一个新空间
-
查找:
mapdemo := make(map[string]string) mapdemo["key1"] = "value1" val, ok := mapdemo["key1"] // 键存在,则将值赋给val,ok==true val1, ok1 := mapdemo["key2"] // 键不存在,则ok==false,val为value的零值
-
map遍历:
// 使用for range 遍历
mapdemo := make(map[string]string)
mapdemo["key1"] = "value1"
mapdemo["key2"] = "value2"
for k,v := range mapdemo {
... // k为key值,v为value值
}
- map的长度
// 使用len()方法,返回key-value对的数量
mapdemo := make(map[string]string)
mapdemo["key1"] = "value1"
mapdemo["key2"] = "value2"
fmt.Println(len(mapdemo)) // 2
- map切片:切片的数据类型是map
var people []map[string]int
maptest := make(map[string]int)
// 使用append添加
for i := 0; i < 5; i++ {
maptest["key"] = i + 1
people = append(people, maptest)
}
fmt.Println(people)
-
说明:
- map是引用类型;
mapdemo := make(map[string]string) mapdemo["key1"] = "value1" mapdemo["key2"] = "value2" mapdemo1 := mapdemo mapdemo1["key1"] = "value111" // 此时 mapdemo和maodemo1都是map["key1":"value111","key2":"value2"]
-
map的key-value对的数量可以动态增加
-
map的值也可以是结构体,来管理更复杂的数据