文章目录
1 map 是什么?
[!note]+ 知识概述: map类型是一个无序的键值对集合,map中的元素不允许重复。
- Map 用于存储 键值对形式的值
- Map 中的每一个元素对应一个值对。
- Map 中的元素不允许重复
- Map 保存对基础哈希表的引用。
- Map 中的元素是无序的
2 map是如何声明的?
2.1 var关键字声明
var m map[keyType]ValueType{key1:value1}
2.2 简短方式声明
m := map[keyType]ValueType{key1:value1}
2.3 内置函数make声明
[!note]- 内置函数make()声明,容量分为指定容量和默认初始容量两种方式。
- 若默认初始容量(不设置容量大小),当map类型的键值对数量超过初始容量时,Go运行时会自动增加map类型的容量,保证后续键值对正常插入。
m1 := make(map[keyType]ValueType)
m2 := make(map[keyType]ValueType, cap) //cap为容量大小
3 map是如何计算长度和容量的?
想要获取map类型的变量长度,我们可使用==[[GO 内置函数-cap和len|内置函数len]]==计算,由于容量是不确定的,所以map不能使用cap获取其容量。
4 Map 元素的添加或编辑
m[key1] = Value1
m[key2] = Value3
5 Map 元素的查看
key1Value = m[key1]
6 Map 元素的删除
[!note] 知识概要: 想要删除map类型变量中的某一个元素,我们可以通过使用==[[Go内置函数delete]]==根据键key来删除某个元素。
- delete函数是删除map元素的唯一方法
- key如果查询不存在,也不会抛出异常
delete(mapName,key)
7 Map 元素判断是否存在
val, ok := mapName[key]
if !ok {
// key不存在
}
8 Map 元素的遍历
[!note] 知识概要: map元素的遍历,我们将使用到
for...rang
来实现。
for k,v := rang m{
fmt.Println(k,v)
}
[!warning]+ 注意事项
- 由于map元素是无序的,当多次遍历map元素时,每次map元素的
次序将不同
。
9 map元素如何实现有序遍历?
[!think]+ 思考: 由于map是无序的键值对集合,那问题来了:
该如何实现有序的键值对集合呢?
- 使用
GO 切片Slice
来保存map元素的key,通过将map元素的key进行有序设置,然后通过遍历获取有序的结果。