如何在 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