Rumah > Artikel > pembangunan bahagian belakang > Bagaimana Saya Boleh Menjamin Lelaran Terpesanan Peta Go?
Maps in Go Preserve Order - Tetapi Tidak Mengikut Cara Yang Anda Mungkin Fikirkan
Dalam Go, peta ialah struktur data yang tidak diisih. Ini bermakna susunan pasangan nilai kunci dalam peta tidak dijamin konsisten. Ini boleh menjadi masalah apabila anda perlu mengulang peta dalam susunan tertentu.
Pertimbangkan kod berikut:
package main import ( "fmt" ) func main() { months := map[int]string{ 1: "January", 2: "February", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "August", 9: "September", 10: "October", 11: "November", 12: "December", } for index, month := range months { fmt.Println(index, "-", month) } }
Apabila anda menjalankan kod ini, anda mungkin menjangkakan output akan mengikut urutan bulan dari Januari hingga Disember. Namun, ini bukan yang berlaku. Sebaliknya, anda akan melihat bahawa bulan dicetak dalam susunan yang kelihatan rawak.
Mengapa ini berlaku?
Sebabnya ialah kekunci dalam peta Go disimpan dalam tidak diisih tatasusunan. Apabila anda mengulangi peta, kekunci diakses mengikut susunan ia disimpan dalam tatasusunan.
Penyelesaian
Terdapat beberapa cara berbeza untuk mendapatkan sekitar isu ini. Salah satu cara ialah menggunakan tatasusunan untuk menyimpan kunci dalam susunan. Anda kemudian boleh mengulang tatasusunan untuk mengakses elemen peta dalam susunan yang diingini.
Cara lain untuk mengatasi isu ini ialah menggunakan peta yang diisih. Peta yang diisih ialah peta yang menjamin bahawa kekunci disimpan dalam susunan yang diisih. Ini berguna apabila anda perlu mengulang peta dalam susunan tertentu.
Contoh
Kod berikut menunjukkan cara menggunakan tatasusunan untuk menyimpan kunci dalam pesanan:
package main import ( "fmt" "sort" ) func main() { months := map[int]string{ 1: "January", 2: "February", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "August", 9: "September", 10: "October", 11: "November", 12: "December", } keys := []int{} for key := range months { keys = append(keys, key) } sort.Ints(keys) for _, key := range keys { fmt.Println(key, "-", months[key]) } }
Apabila anda menjalankan kod ini, anda akan melihat bahawa output adalah bulan dalam urutan dari Januari hingga Disember.
Atas ialah kandungan terperinci Bagaimana Saya Boleh Menjamin Lelaran Terpesanan Peta Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!