本文介绍: 在上一节内容中,我们介绍了Go结构体,包括:定义结构体、声明结构变量使用结构体、结构关联函数new组合等。在本节中,我们将介绍Go映射。Go语言中的映射(Map)是一种无序键值集合,使用关键字map声明,并使用键和值类型作为参数。它是一个用于存储系列无序键值对的集合基于键来存储值,键就像索引一样,指向与该键关联的值。映射创建初始化后,可以通过指定适当类型的键并给这个键赋一个值来为映射赋值每个键必须是唯一的。另外,映射可变的,可以在已有的键值对基础上添加新的键值对。

概述

        在上一节内容中,我们介绍了Go的结构体,包括:定义结构体、声明结构体变量、使用结构体、结构体关联函数、new、组合等。在本节中,我们将介绍Go的映射。Go语言中的映射(Map)是一种无序键值集合,使用关键字map声明,并使用键和值类型作为参数。它是一个用于存储系列无序键值对的集合基于键来存储值,键就像索引一样,指向与该键关联的值。

        映射被创建初始化后,可以通过指定适当类型的键并给这个键赋一个值来为映射赋值每个键必须是唯一的。另外,映射是可变的,可以在已有的键值对基础上添加新的键值对。Go语言中映射的实现使用哈希表,因此它的操作是非常快速的。然而,由于映射是无序的,即使使用同样的顺序保存键值对,每次迭代映射的时候顺序也有可能不一样。

声明映射

        在Go语言中,映射的声明使用map关键字,并指定键和值的类型。以下是声明映射的语法

                  var m map[keyType]valueType

        其中,keyType表示键的类型,valueType表示值的类型。比如:要声明一个字符串作为键、整数作为值的映射,可以参考下面的示例代码

var m map[string]int

初始化映射

        声明映射时,可以直接添加初始键值对,可参考下面的示例代码

package main

import "fmt"

func main() {
    mapWebsite := map[string]int{
        "CSDN":  66,
        "GitHub": 88,
    }

    // 输出:map[CSDN:66 GitHub:88]
    fmt.Println(mapWebsite)
}

        当然,也可以使用make函数初始化映射。在下面的示例代码中,我们通过make函数创建一个空的映射,可以在后续的代码中通过使用赋值操作添加键值对。

package main

import "fmt"

func main() {
    mapWebsite := make(map[string]int)
    // 输出:map[]
    fmt.Println(mapWebsite)
}

        注意:映射是引用类型,使用make函数分配的是一个引用,后续对映射的修改影响到原始的映射对象

操作映射

        声明映射后,我们可以向映射中添加新的键值对,也可以访问和修改映射中的值。具体用法参考下面的示例代码

package main

import "fmt"

func main() {
    mapWebsite := make(map[string]int)
    // 添加新的键值对
    mapWebsite["CSDN"] = 66
    mapWebsite["GitHub"] = 88
    // 输出:map[CSDN:66 GitHub:88]
    fmt.Println(mapWebsite)

    // 访问对应的值,输出:88
    fmt.Println(mapWebsite["GitHub"])

    mapWebsite["CSDN"] = 99
    // 修改键对应的值,输出:99
    fmt.Println(mapWebsite["CSDN"])
}

        另外,我们可以使用len()函数获取映射的长度,使用delete()函数删除某个键值对。

package main

import "fmt"

func main() {
    mapWebsite := map[string]int{
        "CSDN":  66,
        "GitHub": 88,
    }

    // 输出:2
    fmt.Println(len(mapWebsite))
    delete(mapWebsite, "GitHub")
    // 输出:1
    fmt.Println(len(mapWebsite))
}

        可以使用如下方式检查是否存在于映射中:value, ok := mapName[key]。其中,mapName是映射的变量名key是要检查的键。如果key存在于mapName中,那么value将是对应的值,并且ok将置为true;否则,value将是零值,并且ok将置为false

package main

import "fmt"

func main() {
    mapWebsite := map[string]int{
        "CSDN":  66,
        "GitHub": 88,
    }

    value, ok := mapWebsite["CSDN"]
    if ok {
        // 输出:existed: 66
        fmt.Printf("existed: %dn", value)
    } else {
        fmt.Println("not exist")
    }
}

        要遍历map,我们可以使用range关键字。当遍历map时,range返回两个值:键和对应的值。具体用法参考下面的示例代码

package main

import "fmt"

func main() {
    mapFruit := make(map[string]int)
    mapFruit["Apple"] = 66
    mapFruit["Banana"] = 88
    mapFruit["Orange"] = 99

    /* 遍历map,输出:
        Apple 66
        Banana 88
        Orange 99
    */
    for key, value := range mapFruit {
        fmt.Println(key, value)
    }
}

原文地址:https://blog.csdn.net/hope_wisdom/article/details/134365450

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_30790.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注