map
类似其他语言中的哈希表或者字典,以key-value
形式存储数据,key
必须是支持==
或者!-
比较运算的类型,不可以是函数,map
或者slice
。
Map
查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍。
Map
使用make()
创建,支持:=
简写方式
make([keyType]valueType, cap)
,其中cap
表示容量,可省略
超出容量时会自动扩容,但尽量提供一个合理的初始值
键值对不存在时会自动添加,使用delete()
删除某键值对
使用for range
对map
和slice
进行迭代操作
初始化
1 | func mapF1() { |
输出
1 | map[] |
元素操作
添加
1 | func mapF2(){ |
输出
1 | map[age:18 name:Bob] |
删除
1 | + delete(m,"name") |
输出
1 | map[age:18] |
复杂一点的map
1 | func mapF3() { |
输出
1 | map[0:Bob] |
单独初始化
1 | func mapF3() { |
输出
1 | false |
循环迭代
slice
1 | func sliceDemo() { |
输出
1 | 0 1 |
i
是索引,v
是具体的属性值,v是个拷贝,对其操作不会影响原来的map
1 | m := make([]map[int]string, 5) |
输出
1 | map[1:OK] |
m
中并没有"OK"
。所以为了影响map
中,需要使用到索引,即第一个参数
1 | func mapF6() { |
_
为省略
输出
1 | map[1:OK] |
map
1 | m := make(map[int]string) |
输出
1 | 0 Hello |
对map
中元素进行操作
1 | for i, v := range m { |
输出
1 | map[0:Hello 123 1:Jmy 123 2:Nice to meet you 123] |
排序
无序性
1 | func mapF7() { |
输出
1 | [5 1 2 3 4] |
sort 包
1 | import ( |
输出
1 | [1 2 3 4 5] |
练习
1 | func mapF8() { |
输出
1 | map[1:a 2:b 3:c] |