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
Barbara Streisandasal
2024-12-27 07:35:09727semak imbas

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])
    }
}

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
    }
}

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!

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