Rumah >pembangunan bahagian belakang >Golang >Mengapa Lelaran Go Map Tidak Tertib, dan Bagaimana Saya Boleh Menjamin Pesanan?

Mengapa Lelaran Go Map Tidak Tertib, dan Bagaimana Saya Boleh Menjamin Pesanan?

Susan Sarandon
Susan Sarandonasal
2024-12-29 05:20:13277semak imbas

Why is Go Map Iteration Unordered, and How Can I Guarantee Order?

Go Map Printing Out of Order

Dalam Go, peta dilaksanakan menggunakan jadual cincang, yang mengekalkan pasangan nilai kunci dalam bukan -fesyen yang dipesan. Akibatnya, lelaran pada peta tidak menjamin tertib kekunci atau nilai akan dikembalikan.

Mengapa Cetakan Peta Tidak Tertib?

Dalam kod yang disediakan, bulan peta ditakrifkan dengan pasangan nilai kunci yang mewakili nombor bulan dan nama yang sepadan. Apabila melelaran pada peta menggunakan julat, susunan output yang dicetak adalah berdasarkan pelaksanaan dalaman jadual cincang, yang biasanya dioptimumkan untuk prestasi berbanding tertib.

Cara Membetulkan Pesanan

Terdapat beberapa pendekatan untuk memastikan susunan lelaran peta:

1. Gunakan Peta Tertib:

Go tidak mempunyai jenis peta tertib terbina dalam, tetapi terdapat perpustakaan pihak ketiga yang menyediakan fungsi ini. Salah satu perpustakaan tersebut ialah "github.com/golang/collections#OrderedMap."

import "github.com/golang/collections#OrderedMap"

func main() {
    m := collections.NewOrderedMap()
    m.Set(1, "January") // ...

    for _, month := range m.Keys() {
        fmt.Println(month, "-", m.Get(month))
    }
}

2. Isih Kekunci Peta:

Pilihan lain ialah mendapatkan kekunci daripada peta, mengisihnya dan kemudian mengulangi kekunci yang diisih untuk mengakses nilai mengikut susunan.

func main() {
    keys := make([]int, 0, len(months))
    for k := range months {
        keys = append(keys, k)
    }

    sort.Ints(keys)

    for _, k := range keys {
        fmt.Println(k, "-", months[k])
    }
}

Atas ialah kandungan terperinci Mengapa Lelaran Go Map Tidak Tertib, dan Bagaimana Saya Boleh Menjamin Pesanan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn