map : 一种key-value的数据结构
快速入门
//1. 声明 map
var mapA map[int]string
fmt.Println(mapA)
//2. 分配内存
mapA = make(map[int]string, 10)
//3. 赋值
mapA[0] = "aaa"
mapA[1] = "bbb"
fmt.Println(mapA)
使用方式
//使用方式
//第一种
var map1 map[string]string
map1 =make(map[string]string,10)
fmt.Println(map1)
//第二种
map2 := make(map[string]string)
fmt.Println(map2)
//第三种
map3 := map[string]string{
"11" : "one",
"22" : "two",
}
fmt.Println(map3)
增删改查
map的增加和更新
- map[“key”] = value
- 如果key还没有,就是增加,如果key存在,就是修改
map删除
- delete(map,”key”)
- 如果key存在,删除该key-value ,如果key不存在,不操作,也不会报错
map查找
map3 := map[string]string{
"11" : "one",
"22" : "two",
}
val,findRes := map3["11"]
fmt.Println(val,findRes)
//one true
map遍历
//map遍历
map4 := map[string]string{
"11" : "one",
"22" : "two",
"33" : "大头",
}
for key, value := range map4 {
fmt.Println(key,value)
}
22 two
33 大头
11 one
map切片
切片的数据类型是map,我们称之为 map切片 : slice of map
//map切片
monsters := make([]map[string]string,2)
fmt.Println(monsters, len(monsters), cap(monsters)) //[map[] map[]] 2 2
monsters[0] = make(map[string]string)
monsters[0]["name"] = "牛魔王"
monsters[0]["age"] = "500"
monsters[0]["sex"] = "男"
monsters[1] = make(map[string]string)
monsters[1]["name"] = "白骨精"
monsters[1]["age"] = "300"
monsters[1]["sex"] = "女"
//切片append
newMonster := make(map[string]string)
newMonster["name"] = "人妖精"
newMonster["age"] = "300"
newMonster["sex"] = "未知"
monsters = append(monsters,newMonster)
fmt.Println(monsters)
//[map[age:500 sex:男 name:牛魔王] map[name:白骨精 age:300 sex:女] map[name:人妖精 age:300 sex:未知]]
map排序
//如果要按照map的key排序输出
//1. 先将map的key放到切片中
//2. 对切片排序
//3. 遍历切片,按照key来输出map的值
//key切片
var keys []int
for key := range mapz {
keys = append(keys,key)
}
//排序
sort.Ints(keys)
fmt.Println("keys: ",keys)
//输出
for _,key := range keys {
fmt.Println(mapz[key])
}
使用细节
- map是引用类型,在一个函数接受map后,修改后会直接影响原来的map
- map的容量达到后,会自动扩容,不会发生panic,map能动态增长 key-value
- map的value经常使用 struct类型 更适合管理复杂数据