Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mengulang Melalui Peta Go dalam Susunan Sisipan?

Bagaimanakah Saya Boleh Mengulang Melalui Peta Go dalam Susunan Sisipan?

Barbara Streisand
Lepaskan: 2024-12-19 20:52:16
asal
247 orang telah melayarinya

How Can I Iterate Through a Go Map in the Order of Insertion?

Mengulang Peta Go mengikut Susunan Sisipan

Kebijaksanaan konvensional mencadangkan bahawa susunan lelaran peta Go tidak dapat diramalkan dan tidak stabil. Walau bagaimanapun, untuk mencapai pemeliharaan pesanan memerlukan penggunaan struktur data alternatif yang mengekalkan urutan sisipan secara bebas:

1. Kekunci Penjejakan dalam Sekeping Berasingan:

Dengan mengekalkan sekeping kekunci mengikut susunan ia dimasukkan, anda boleh melelang ke atas kekunci dan mendapatkan semula nilai yang sepadan daripada peta. Ini menghapuskan keperluan untuk data pendua dan menyediakan urutan lelaran yang boleh dipercayai.

2. Menggunakan Pembungkus Nilai dengan Senarai Berpaut:

Pendekatan lain melibatkan pembalut setiap nilai dalam peta dengan struct yang menyertakan rujukan kepada kunci seterusnya dalam susunan sisipan. Ini membolehkan pelintasan unsur dalam urutan yang dimaksudkan, walaupun selepas dialih keluar atau sisipan.

Perbandingan:

Kedua-dua kaedah mengekalkan kelebihan menggunakan peta sambil menyediakan lelaran tertib . Walau bagaimanapun, pendekatan dengan hirisan berasingan untuk kunci mempunyai pelaksanaan yang lebih mudah tetapi mungkin dikenakan overhed apabila mengalih keluar elemen. Pendekatan senarai terpaut menawarkan penyingkiran yang lebih pantas tetapi memperkenalkan lebih kerumitan.

Coretan Kod:

Kunci dalam Slice:

type Map struct {
    m    map[Key]Value
    keys []Key
}

func (m *Map) Set(k Key, v Value) {
    // ...
    m.keys = append(m.keys, k)
    // ...
}
Salin selepas log masuk

Pembungkus Nilai dengan Terpaut Senarai:

type valueWrapper struct {
    value Value
    next  *Key
}

type Map struct {
    m           map[Key]valueWrapper
    first, last *Key
}

func (m *Map) Set(k Key, v Value) {
    // ...
    if m.last != nil {
        w := m.m[*m.last]
        m.m[*m.last] = valueWrapper{w.v, &k}
    }
    // ...
}
Salin selepas log masuk

Dengan menggunakan teknik ini, anda boleh melelakan dengan cekap melalui peta Go dan mendapatkan semula item mengikut susunan asalnya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengulang Melalui Peta Go dalam Susunan Sisipan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan