一、Map(映射)

Map(映射)是一种基于哈希表实现的数据结构,用于存储一系列无序的键值对,它基于键来存储值。
映射的特点是能够基于键快速检索数据。键就像是数组的索引一样,指向与键关联的值。
与 C++、Java 等编程语言不同,在 Golang 中使用映射不需要引入任何库。因此 Golang 的映射使用起来更加方便。我们可以通过下图简要的理解一下映射中键值对的关系:

二、Map用法

Map定义

使用var来定义一个map

  1. var myMap map[string]string //myMap ==nil

我们还可以使用内置make函数来构造map

  1. myMap2 := make(map[string]int //myMap2==empty map

查找元素

返回键对应的值,然后通过判断这个值是否是零值来确定键是否存在。

  1. value := myColors["Red"]
  2. if value !="" {
  3. fmt.Println("red=",value)
  4. }

除了返回键对应的值以外,map中还有一个表示该键是否存在的布尔值,我们使用exists变量来接收它然后做判断。

  1. //exists是布尔值,用来判断key是否存在
  2. if value,exists:=myColors["red1"]; exists{ //true表示key存在
  3. fmt.Println("red=",value)
  4. }else {
  5. fmt.Println("key does not exist!")
  6. }

和遍历数组、切片一样,使用 range关键字可以遍历映射中的所有值。但对映射来说,range 返回的不是索引和值,而是键值对。

显然,这种方式只能用在映射存储的值都是非零值的情况下。 注意:在 Golang 中,通过键来索引映射时,即便这个键不存在也总会返回一个值。在这种情况下,返回的是该值对应的类型的零值。

遍历Map

  1. //定义一个map,存储颜色以及颜色对应的十六进制代码
  2. myColors:=map[string]string {
  3. "Red":"#da1337",
  4. "Orange":"#e95a22",
  5. "Green":"#a3ff47",
  6. }
  7. //遍历map里的key和value
  8. for key,value := range myColors{
  9. fmt.Printf("key:%s,value:%s\n",key,value)
  10. }

Go语言中Map底层使用了哈希表来实现,所以即使使用了同样的顺序保存键值对,但是迭代Map时,元素的输出顺序可能会不一样。执行上面代码,输出效果如下:

  1. key:Red,value:#da1337
  2. key:Orange,value:#e95a22
  3. key:Green,value:#a3ff47

删除键值对

使用Go语言delete()函数从map中删除一组键值对。delete函数如下

  1. //builtin.go
  2. func delete(m map[Type]Type1, key Type)
  3. delete(m, key)
  4. //m 表示需要操作的map
  5. // key 表示需要删除的键

实例

image.png
image.png**