map : 一种key-value的数据结构

快速入门
//1. 声明 mapvar mapA map[int]stringfmt.Println(mapA)//2. 分配内存mapA = make(map[int]string, 10)//3. 赋值mapA[0] = "aaa"mapA[1] = "bbb"fmt.Println(mapA)
使用方式
//使用方式//第一种var map1 map[string]stringmap1 =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 two33 大头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 2monsters[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"] = "女"//切片appendnewMonster := 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 []intfor 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类型 更适合管理复杂数据
