源码家族
当前位置:首页 > 资讯中心

资讯中心

【 Go语言访问map中的每一个键值对 】

发布时间:2021-08-06 10:29:43 阅读次数:135

在go语言中,Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

定义 Map

可以使用内建函数 make 也可以使用 map 关键字来定义 Map:

/* 声明变量,默认 map 是 nil */var map_variable map[key_data_type]value_data_type/* 使用 make 函数 */map_variable := make(map[key_data_type]value_data_type)

如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对

实例

下面实例演示了创建和使用map:

实例

package main

import "fmt"

func main() {
    var countryCapitalMap map[string]string /*创建集合 */
    countryCapitalMap = make(map[string]string)

    /* map插入key - value对,各个国家对应的首都 */
    countryCapitalMap [ "France" ] = "巴黎"
    countryCapitalMap [ "Italy" ] = "罗马"
    countryCapitalMap [ "Japan" ] = "东京"
    countryCapitalMap [ "India " ] = "新德里"

    /*使用键输出地图值 */ 
    for country := range countryCapitalMap {
        fmt.Println(country, "首都是", countryCapitalMap [country])
    }

    /*查看元素在集合中是否存在 */
    capital, ok := countryCapitalMap [ "American" ] /*如果确定是真实的,则存在,否则不存在 */
    /*fmt.Println(capital) */
    /*fmt.Println(ok) */
    if (ok) {
        fmt.Println("American 的首都是", capital)
    } else {
        fmt.Println("American 的首都不存在")
    }
}

以上实例运行结果为:

France 首都是 巴黎Italy 首都是 罗马Japan 首都是 东京India  首都是 新德里American 的首都不存在

map 的遍历过程使用 for range 循环完成,代码如下:

scene := make(map[string]int)scene["route"] = 66scene["brazil"] = 4scene["china"] = 960for k, v := range scene {fmt.Println(k, v)}

遍历对于Go语言的很多对象来说都是差不多的,直接使用 for range 语法即可,遍历时,可以同时获得键和值,如只遍历值,可以使用下面的形式:

for _, v := range scene {

将不需要的键使用_改为匿名变量形式。

只遍历键时,使用下面的形式:

for k := range scene {

无须将值改为匿名变量形式,忽略值即可。

注意:遍历输出元素的顺序与填充顺序无关,不能期望 map 在遍历时返回某种期望顺序的结果。

如果需要特定顺序的遍历结果,正确的做法是先排序,代码如下:

纯文本复制
scene := make(map[string]int)// 准备map数据scene["route"] = 66scene["brazil"] = 4scene["china"] = 960// 声明一个切片保存map数据var sceneList []string// 将map数据遍历复制到切片中for k := range scene {sceneList = append(sceneList, k)}// 对切片进行排序sort.Strings(sceneList)// 输出fmt.Println(sceneList)

代码输出如下:

[brazil china route]

代码说明如下:

  • 第 1 行,创建一个 map 实例,键为字符串,值为整型。

  • 第 4~6 行,将 3 个键值对写入 map 中。

  • 第 9 行,声明 sceneList 为字符串切片,以缓冲和排序 map 中的所有元素。

  • 第 12 行,将 map 中元素的键遍历出来,并放入切片中。

  • 第 17 行,对 sceneList 字符串切片进行排序,排序时,sceneList 会被修改。

  • 第 20 行,输出排好序的 map 的键。


上一篇:MySQL使用中的单列索引是否快于组合索引
下一篇:如何写出高质量的技术文档