如何在 Go 中迭代整个 Map

Suraj Joshi 2023年1月30日
  1. 声明和初始化 Map
  2. 遍历 Go 中的 Map
如何在 Go 中迭代整个 Map

哈希表是计算机科学中功能最强大,用途最广泛的数据结构之一。对于不同的编程语言,存在各种哈希表实现。在 Go 中,哈希表被实现为内置的 map 数据类型。简而言之,Map 是键值对的集合。我们在 Go 中使用 for...range 语句通过一次检索一个 key 来遍历 map 的整个键值 keys

声明和初始化 Map

可以使用以下语法声明 Map:

var map_name map[KeyType]ValueType

其中,键类型是任何可比较的数据类型,值类型也是任何数据类型,包括 Map 本身。

package main

import "fmt"

func main() {
    map_1 := map[int]string{
        0: "Alok",
        1: "Reman",
        2: "Riken",
        3: "Rudra",
    }

    fmt.Println(map_1)
}        

输出:

map[0:Alok 1:Reman 2:Riken 3:Rudra]

也可以使用内置的 make()函数来创建 Maps。

package main

import "fmt"

func main() {
    var map_2 = make(map[int]string)
    map_2[0] = "Alok"
    map_2[1] = "Reman"
    map_2[2] = "Riken"
    map_2[3] = "Rudra"
    fmt.Println(map_2)

}        

输出:

map[0:Alok 1:Reman 2:Riken 3:Rudra]

遍历 Go 中的 Map

我们可以使用 for … range 语句遍历整个 map。但是,由于 map 是无序集合,因此 map 上的迭代顺序不固定。

遍历 Go 中所有 map 的键和值

package main

import "fmt"

func main() {
    map_1 := map[int]string{
        0: "Alok",
        1: "Reman",
        2: "Riken",
        3: "Rudra",
    }

    for k, v := range map_1 {
        fmt.Printf("Key:%v Value: %s\n", k, v)
    }

}    

输出:

Key:0 Value: Alok
Key:1 Value: Reman
Key:2 Value: Riken
Key:3 Value: Rudra

但是,如果将不同的数据类型用于映射的键或值,则在打印键或值时必须指定该特定数据类型的格式。下图显示了一个以字符串类型为 key 的 map 的示例:

package main

import "fmt"

func main() {
    map_1 := map[string]string{
        "Giri    ": "Alok",
        "Nembang ": "Reman",
        "Maharjan": "Riken",
        "Jha     ": "Rudra",
    }

    for k, v := range map_1 {
        fmt.Printf("Key:%v  Value: %s\n", k, v)
    }

}
    

输出:

Key:Giri      Value: Alok
Key:Nembang   Value: Reman
Key:Maharjan  Value: Riken
Key:Jha       Value: Rudra

仅在 Go map 中迭代键

package main

import "fmt"

func main() {
    map_1 := map[int]string{
        0: "Alok",
        1: "Reman",
        2: "Riken",
        3: "Rudra",
    }

    for k := range map_1 {
        fmt.Printf("Key:%v\n", k)
    }

}

输出:

Key:0
Key:1
Key:2
Key:3

仅在 Go map 中迭代值

package main

import "fmt"

func main() {
    map_1 := map[int]string{
        0: "Alok",
        1: "Reman",
        2: "Riken",
        3: "Rudra",
    }

    for _, v := range map_1 {
        fmt.Printf("Value:%s\n", v)
    }
}    

输出:

Value:Riken
Value:Rudra
Value:Alok
Value:Reman

上面输出中的键和值对的排列顺序以及在你的侧面上打印键-值对的排列顺序可能会有所不同,因为 Map 是无序集合。因此,你不必担心。

作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相关文章 - Go Map