在 Go 语言中,映射(也叫map,以下都以map来讲述) 是一种内置的数据结构,用于存储键值对(key:value),非常适合用于需要快速查找、插入和删除的场景。它是一种引用类型,几乎所有的编程语言都有对这种数据结构的支持,只不过叫法不一样,比如:在python 里叫字典,在javascrtip叫json等等。
map 是一种无序的、基于哈希表(hash table)的数据结构。每个键都是唯一的,可以通过键快速查找对应的值。
map的元素是无序的,map 中元素没有固定的顺序,不像数组和切片,可以通过下标读取元素的值,map中类似下标的东西叫作索引操作符,就是map中的key。map 的大小可以动态增长或缩小,map中每个键只能出现一次,重复的键会覆盖之前的值。
可以使用内建函数make来创建映射,语法如下:
make(map[KeyType]ValueType)
//创建一个存储字符串键和整数值的映射
m := make(map[string]int)使用索引操作符来给映射添加元素,语法如下:
map[key] = value
//向上述的映射中添加元素
m["one"] = 1
m["two"] = 2
也可以使用索引操作符来访问映射中的元素,实现新增和修改map元素,语法如下:
alue = map[key]
//访问上述映射中的元素
v1 := m["one"]
v2 := m["two"]还可以使用内建函数delete来删除映射中的元素,语法如下:
delete(map, key)
//删除上述映射中的元素
delete(m, "one")遍历时,可以使用for-range结构来遍历映射中的所有元素,语法如下:
for key, value := range map {
// do something with key and value
}//遍历上述映射
for key, value := range m {
fmt.Printf("Key: %s, Value: %d\n", key, value)
}map 在 Go 中的实现是基于哈希表(hash table)。哈希表通过哈希函数将键映射到数组的索引,以便快速存取元素。map在Golang中有很多应用,例如,可以用来实现集合的并集、交集等操作,也可以用来实现状态机等复杂的数据结构,可以用于需要快速查找、插入和删除的场景,如缓存、字典等。可以用于建立键值关系,例如用户ID与用户信息的映射,用于频率统计,例如词频统计等。
在使用map时,应注意:
- 由于map是引用类型,当你把map赋值给一个变量,两个变量会引用同一个映射,因此,你可以通过任何一个变量来修改映射。
- 如果你尝试访问映射中不存在的键,结果将是该映射值类型的零值。
- 如果你尝试向映射中存入nil值,程序会发生运行时错误。
- 映射的键可以是任何可比较类型,比如整数、浮点数、字符串、指针等,但不可以是切片、映射、功能等不可比较的类型。
- map 的遍历顺序是无序的,每次遍历可能会得到不同的顺序。
map 是 Go 语言中强大的数据结构,适用于多种场景。它的键值对存储方式使得数据查找和操作高效灵活。理解其特性、用法及底层原理对于高效使用 Go 语言至关重要。通过以上示例和分析,可以很好地掌握map 的使用。
















