教程 > Go 教程 > Go 基础 阅读:412

Go 语言Map详解

Map 是 Go 中的一种内置类型,用于存储键值对。其中 Map中的键是唯一的,一个键映射一个值。键是一个对象,用于在以后检索值。给定一个键和一个值,我们可以将值存储在 Map 对象中。值存储后,就可以使用其对应的键检索该值。

如何创建Map?

必须使用make函数来创建map。可以通过将键和值的类型传递给make函数来创建映射。语法如下

make(map[type of key]type of value)  

例如

employeeSalary := make(map[string]int)  

上面代码创建了一个名为employeeSalary 的map,其键和值对应的类型分别为 string 和 int。

下面我们看一个完整的示例

package main

import (  
    "fmt"
)

func main() {  
    employeeSalary := make(map[string]int)
    fmt.Println(employeeSalary)
}

运行示例

上述代码执行结果如下

map[]

由于我们没有向 map 中添加任何元素,因此它是空的。


在 map 中添加元素

向 map 添加新元素的语法与向数组中添加新元素的语法相同。下面的程序向 employeeSalary map中添加了一些新员工。

package main

import (  
    "fmt"
)

func main() {  
    employeeSalary := make(map[string]int)
    employeeSalary["steve"] = 12000
    employeeSalary["jamie"] = 15000
    employeeSalary["mike"] = 9000
    fmt.Println("employeeSalary map 内容:", employeeSalary)
}

运行示例

上述代码执行结果如下

employeeSalary map 内容: map[jamie:15000 mike:9000 steve:12000]

我们增加了三名员工steve,jamie和mike以及与他们相对应的工资。

也可以在声明期间对 map进行初始化

employeeSalary := map[string]int {
       "steve": 12000,
       "jamie": 15000,
   }
   employeeSalary["mike"] = 9000
   fmt.Println("employeeSalary map 内容:", employeeSalary)

其最后打印出来的结果是相同的。

没有必要只将字符串类型作为键。所有可比较的类型,例如 boolean、integer、float、complex、string都可以作为 map的键。甚至用户定义的类型(如结构体)也可以作为键。


检索 map 中的值

现在我们已经向 Map 中添加了一些元素。接下来让我们学习如何检索它们。map[key]是检索 Map 元素的语法。

package main

import (  
    "fmt"
)

func main() {  
    employeeSalary := map[string]int{
        "steve": 12000,
        "jamie": 15000,
        "mike": 9000,
    }
    employee := "jamie"
    salary := employeeSalary[employee]
    fmt.Println(employee,"的薪资是 ", salary)
}

运行示例

上述代码执行结果如下

jamie 的薪资是  15000

如果元素不存在会发生什么?Map 将返回该元素类型的零值。

对于上述示例中的employeeSalary。我们试图访问一个不存在的元素,那么int类型的零值,0,将被返回。

package main

import (  
    "fmt"
)

func main() {  
    employeeSalary := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    fmt.Println("jiyik 的薪资是 ", employeeSalary["jiyik"])
}

运行示例

上述代码执行结果如下

jiyik 的薪资是  0

迭代 map 中的所有元素

for 循环的 range 形式可用于迭代 map 中的所有元素。

package main

import (  
    "fmt"
)

func main() {  
    employeeSalary := map[string]int{
        "steve": 12000,
        "jamie": 15000,
        "mike":  9000,
    }
    fmt.Println("map 的内容如下:")
    for key, value := range employeeSalary {
        fmt.Printf("employeeSalary[%s] = %d\n", key, value)
    }
}

运行示例

上述代码执行结果如下

map 的内容如下:
employeeSalary[steve] = 12000
employeeSalary[jamie] = 15000
employeeSalary[mike] = 9000

从 map 中删除元素

delete() 函数用于从 map 中删除元素。它需要map和要删除的相应键。

delete() 函数不返回任何值。

package main

import (  
    "fmt"
)

func main() {  
    employeeSalary := map[string]int{
        "steve": 12000,
        "jamie": 15000,     
        "mike": 9000,
    }
    fmt.Println("删除之前的map:", employeeSalary)
    delete(employeeSalary, "steve")
    fmt.Println("删除之后的map:", employeeSalary)
}

运行示例

上述代码执行结果如下

删除之前的map: map[jamie:15000 mike:9000 steve:12000]
删除之后的map: map[jamie:15000 mike:9000]

查看笔记

扫码一下
查看教程更方便