Rumah >pembangunan bahagian belakang >Golang >Bagaimana Saya Boleh Menjamin Lelaran Terpesanan Peta Go?

Bagaimana Saya Boleh Menjamin Lelaran Terpesanan Peta Go?

Susan Sarandon
Susan Sarandonasal
2024-11-25 20:09:13937semak imbas

How Can I Guarantee Ordered Iteration Over Go Maps?

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!

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