map 映射
基本介绍
map
是无序的- 由
key-value
组成 make
初始化之后才能够使用map
是引用类型的,遵守引用类型传递
的机制
1 | var mapName map[keytype]valuetype |
- 可以当作
key
的值类型:
- bool布尔值
- int数字(通常)
- string字符串(通常)
- pointer指针
- channel通道
- 可以当作
value
的值类型
- bool布尔值
- 数字(通常)
- string字符串(通常)
- pointer指针
- channel通道
通常是数字,string,map,struct
。
初始化make
map
的声明是不会分配内存的,需要进行make
初始化后才会分配内存。
- key不能重复,无序的
- value可以重复
1 | var a map[string]string |
map使用方式
1 | package main |
1 | // 案例 |
map 之增删改查crud
- key不存在就是增加,存在就是修改;
- 删除delete(map, “key”):内置函数,k-v存在则删除;不存在,不操作,也不会报错
- 如果要删除全部
key-value
:需要遍历全部的key
;或者通过make(...)
形成一个新的map,原来的通过gc
回收 - 查找
key-value
1 | package main |
map遍历
只能通过for-range
来进行遍历
1 | package main |
map 切片
切片的数据类型如果是map,则称之为slice of map,map切片。map的个数能够动态增加。
1 | package main |
map排序
- 默认是无序,也不是按照添加的顺序排序的
golang
中的map
排序,是现将key
进行排序,然后根据key
遍历输出即可
1 | package main |
使用细节
- 引用类型
map
容量达到后,会增加map
元素,实现动态扩容,不会发生panic
;map
的value
经常使用结构体struct
;更适合管理复杂的数据
1 | package main |
课堂练习
如果map
的值同样是map
类型,需要进行两次的make
初始化操作。
1 | package main |