首頁 > 後端開發 > Golang > 迭代 Go Map 時如何保證有序輸出?

迭代 Go Map 時如何保證有序輸出?

Patricia Arquette
發布: 2024-11-28 01:16:15
原創
695 人瀏覽過

How to Guarantee Ordered Output When Iterating Over Go Maps?

Go 中的映射:維護順序和存取元素

在Go 中,映射提供了一種動態且高效的方式來存儲鍵值對。然而,與數組或切片不同,映射本身並不排序。這可能會導致在迭代它們時輸出出現亂序。

以下程式碼片段示範了此行為:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

package main

 

import (

    "fmt"

)

 

type monthsType struct {

    no   int

    text string

}

 

var months = map[int]string{

    1:"January", 2:"Fabruary", 3:"March", 4:"April", 5:"May", 6:"June",

    7:"July", 8:"August", 9:"September", 10:"October", 11:"Novenber", 12:"December",

}

 

func main(){

    for no, month := range months {

        fmt.Print(no)

        fmt.Println("-" + month)

    }

}

登入後複製

當您執行此程式碼時,您會注意到地圖不按鍵順序列印(數字 1 至 12)。相反,它以明顯隨機的順序打印。

解決方案:控制地圖中的順序

要以特定順序列印地圖,您可以選擇以下幾種方法可以考慮:

1.使用陣列:
如果順序很重要,您可以使用陣列依序儲存元素。陣列提供了有序的資料結構,您可以使用索引直接存取元素。

2.排序鍵:
如果需要將映射保留為資料結構,可以使用 sort.Ints函數取得鍵的排序列表,迭代排序後的鍵,並從映射中擷取對應的值.

範例程式碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

package main

 

import (

    "fmt"

    "sort"

)

 

type monthsType struct {

    no   int

    text string

}

 

var months = map[int]string{

    1:"January", 2:"Fabruary", 3:"March", 4:"April", 5:"May", 6:"June",

    7:"July", 8:"August", 9:"September", 10:"October", 11:"Novenber", 12:"December",

}

 

func main(){

    var sortedKeys []int

    for key := range months {

        sortedKeys = append(sortedKeys, key)

    }

    sort.Ints(sortedKeys)

 

    fmt.Println("Printing in order:")

    for _, key := range sortedKeys {

        fmt.Printf("%d-%s", key, months[key])

    }

}

登入後複製

在此程式碼中,sortedKeys 陣列會建立用於按升序儲存映射的鍵。然後,我們迭代排序後的鍵並從映射中存取相應的值。這會產生以下輸出:

1

2

Printing in order:

1-January2-Fabruary3-March4-April5-May6-June7-July8-August9-September10-October11-Novenber12-December

登入後複製

以上是迭代 Go Map 時如何保證有序輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板