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

Bagaimanakah Saya Boleh Mengulangi Peta Go dalam Susunan Sisipan?

Barbara Streisand
Lepaskan: 2024-12-27 07:35:09
asal
771 orang telah melayarinya

How Can I Iterate Over a Go Map in Insertion Order?

Meletupkan Peta dalam Susunan Sisipan

Go maps tidak menjamin tertib lelaran, menjadikannya mencabar untuk mendapatkan semula item peta mengikut susunan ia dimasukkan . Untuk menangani perkara ini, pertimbangkan pendekatan berikut:

Menggunakan Kepingan Kekunci

Kekalkan kepingan berasingan untuk menjejaki kekunci dalam susunan sisipan. Setiap kali anda menambah pasangan nilai kunci pada peta, semak sama ada kunci itu wujud dalam kepingan. Jika tidak, tambahkannya. Apabila melelang ke atas peta, gunakan kepingan kekunci untuk mengakses item.

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

func (m *Map) Set(k Key, v Value) {
    if _, ok := m.m[k]; !ok {
        m.keys = append(m.keys, k)
    }
    m.m[k] = v
}

func (m *Map) Range() {
    for _, k := range m.keys {
        fmt.Println(m.m[k])
    }
}
Salin selepas log masuk

Menggunakan Pembungkus Nilai Senarai Terpaut

Balut nilai peta dengan struktur data yang menyimpan nilai dan penunjuk ke kunci seterusnya dalam susunan sisipan. Setiap kali anda menambah pasangan nilai kunci, kemas kini penunjuk seterusnya pembungkus nilai sebelumnya. Untuk mengulang dalam susunan sisipan, mulakan dengan kekunci pertama dan ikuti petunjuk seterusnya.

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 _, ok := m.m[k]; !ok && m.last != nil {
        w2 := m.m[*m.last]
        m.m[*m.last] = valueWrapper{w2.v, &k}
    }
    w := valueWrapper{v: v}
    m.m[k] = w
    if m.first == nil {
        m.first = &k
    }
    m.last = &k
}

func (m *Map) Range() {
    for k := m.first; k != nil; {
        w := m.m[*k]
        fmt.Println(w.v)
        k = w.next
    }
}
Salin selepas log masuk

Penyelesaian ini menangani keperluan untuk mengekalkan susunan sisipan sambil mengekalkan faedah peta. Dengan mengasingkan penjejakan utama daripada operasi peta, atau memautkan nilai mengikut tertib, anda boleh mengulangi peta dalam urutan yang dikehendaki dengan pasti.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengulangi 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