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中文網其他相關文章!