一、Map(映射)
Map(映射)是一种基于哈希表实现的数据结构,用于存储一系列无序的键值对,它基于键来存储值。
映射的特点是能够基于键快速检索数据。键就像是数组的索引一样,指向与键关联的值。
与 C++、Java 等编程语言不同,在 Golang 中使用映射不需要引入任何库。因此 Golang 的映射使用起来更加方便。我们可以通过下图简要的理解一下映射中键值对的关系:
二、Map用法
Map定义
使用var来定义一个map
var myMap map[string]string //myMap ==nil
我们还可以使用内置make函数来构造map
myMap2 := make(map[string]int //myMap2==empty map
查找元素
返回键对应的值,然后通过判断这个值是否是零值来确定键是否存在。
value := myColors["Red"]
if value !="" {
fmt.Println("red=",value)
}
除了返回键对应的值以外,map中还有一个表示该键是否存在的布尔值,我们使用exists变量来接收它然后做判断。
//exists是布尔值,用来判断key是否存在
if value,exists:=myColors["red1"]; exists{ //true表示key存在
fmt.Println("red=",value)
}else {
fmt.Println("key does not exist!")
}
和遍历数组、切片一样,使用 range
关键字可以遍历映射中的所有值。但对映射来说,range 返回的不是索引和值,而是键值对。
显然,这种方式只能用在映射存储的值都是非零值的情况下。 注意:在 Golang 中,通过键来索引映射时,即便这个键不存在也总会返回一个值。在这种情况下,返回的是该值对应的类型的零值。
遍历Map
//定义一个map,存储颜色以及颜色对应的十六进制代码
myColors:=map[string]string {
"Red":"#da1337",
"Orange":"#e95a22",
"Green":"#a3ff47",
}
//遍历map里的key和value
for key,value := range myColors{
fmt.Printf("key:%s,value:%s\n",key,value)
}
Go语言中Map底层使用了哈希表来实现,所以即使使用了同样的顺序保存键值对,但是迭代Map时,元素的输出顺序可能会不一样。执行上面代码,输出效果如下:
key:Red,value:#da1337
key:Orange,value:#e95a22
key:Green,value:#a3ff47
删除键值对
使用Go语言delete()
函数从map中删除一组键值对。delete函数如下
//builtin.go
func delete(m map[Type]Type1, key Type)
delete(m, key)
//m 表示需要操作的map
// key 表示需要删除的键
实例
**