golang基础笔记(4):Map
map
map是Go语言中提供的映射关系的容器类数据结构,其内部使用散列表(hash)实现。
map是一种无序的基于key-value
的数据结构,Go语言中的map是引用类型,必须初始化才能使用。
构建map
var
1 | var m map[KeyType]ValueType |
make()
1 | m := make(map[KeyType]ValueType,[cap]) |
cap为可选参数
使用字面值
map支持在声明的时候填充元素
1 | m := map[KeyType]ValueType{ |
大括号内也可以为空
1 | m := map[string]int{} |
通过使用空接口,可以在同一个map中存储不同类型的value
1 | m := map[string]interface{}{ |
CRUD
追加键值对
直接通过键+值的方式就可以追加一堆键值对
1 | m["李四"] = 20 |
判断某个键是否存在
Go语言在通过Key访问键值对时,会返回两个值
1 | value, ok := map[key] |
value是key所对的值,ok
是该值是否存在,为一个bool
若值不存在,则value会得到一个0值,且ok会得到false
1 | scoreMap := map[string]int{ |
遍历map
Go语言中使用for range
遍历map
1 | scoreMap := map[string]int{ |
**注意:**由于map本身的性质,因此遍历的顺序与添加键值对的顺序无关
有没有办法指定顺序遍历呢?是可以的。
指定顺序遍历
具体步骤:
- 构建一个切片,将key存入
- 对切片排序
- 按照切片中key的顺序遍历map
1 | //1.构建一个切片, 并将key存入 |
修改值
分为两种情况
-
一般情况下,直接用下标访问修改即可
1
scoreMap["张三"] += 10
-
如果值是一个结构体等复杂结构,就不能直接修改下标访问到的结构体中的内部值,需要重新构建一个新的结构体,重新给map赋值
删除键值对
使用delete()
内建函数从map中删除一组键值对
1 | delete(map, key) |
map为要删除键值对的map,key为所对的键,例子
1 | delete(scoreMap, "张三") |
切片相关
元素为map类型的切片
1 | //1.切片的初始化 |
值为切片类型的map
构建一个各个国家包含的城市的map:
1 | //1.map的初始化,没有完成切片的初始化 |