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

Bagaimanakah Saya Boleh Mengulang Melalui Peta Go dalam Susunan Tertentu?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-26 08:15:09712semak imbas

How Can I Iterate Through a Go Map in a Specific Order?

Lelaran Teratur Peta Go: Panduan Komprehensif

Melelaran melalui peta Go mengikut urutan boleh menjadi satu cabaran kerana 仕様 bahasa itu, yang menekankan konkurensi dan bukannya pemeliharaan perintah. Artikel ini akan meneroka dua kaedah kukuh untuk mencapai lelaran tertib sambil mengekalkan kelebihan menggunakan peta.

1. Mengekalkan Tertib dengan Sekeping Kekunci

Kaedah ini melibatkan pengesanan kekunci peta dalam kepingan berasingan untuk memastikan susunan lelaran. Semasa memperkenalkan overhed, pendekatan ini menawarkan kesederhanaan dan pelaksanaan yang jelas.

  • Balut Kunci: Untuk setiap kunci yang dimasukkan ke dalam peta, semak sama ada ia wujud dalam kepingan kunci. Jika tidak, tambahkan kunci pada kepingan.
  • Penggunaan Slice: Semasa lelaran, gunakan kepingan kekunci untuk mengakses nilai yang sepadan dalam peta.
  • Mengekalkan Penyegerakan: Keluarkan kekunci daripada kepingan apabila nilai yang sepadan dialih keluar daripada peta.

Contoh Pelaksanaan:

type Key int   // Key type
type Value int // Value type

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

func New() *Map {
    return &Map{m: make(map[Key]Value)}
}

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

2. Memautkan Nilai dalam LinkedList

Pendekatan ini melibatkan nilai pembalut dalam struct yang mengandungi nilai sebenar dan rujukan kepada kunci seterusnya. Ia membenarkan pemasukan dan penyingkiran elemen yang cekap.

  • Pembungkus Nilai: Takrifkan struct pembalut nilai dengan nilai dan rujukan kepada kunci seterusnya.
  • Sisipan Peta: Tetapkan pembalut nilai sebagai nilai kunci dalam peta.
  • Mekanisme Pemautan: Pautkan pembalut baharu dengan pembalut sebelumnya untuk mengekalkan susunan sisipan.
  • Lelaran: Mulakan lelaran daripada kekunci pertama dan ikuti rujukan seterusnya untuk mengakses nilai dalam sisipan pesanan.

Contoh Pelaksanaan:

type Key int   // Key type
type Value int // Value type

type valueWrapper struct {
    value Value
    next  *Key // Next key
}

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

func New() *Map {
    return &Map{m: make(map[Key]valueWrapper)}
}

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.value, &k}
    }
    w := valueWrapper{value: 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.value)
        k = w.next
    }
}

Bonus:

Berikut ialah beberapa petua tambahan untuk dipertimbangkan :

  • Pelaksanaan Peta: Pertimbangkan untuk mencipta jenis tersuai yang membungkus peta dan menyediakan kaedah yang diperlukan untuk lelaran tersusun.
  • Pengoptimuman: Sentiasa terokai pengoptimuman untuk mengurangkan overhed dan meningkatkan prestasi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengulang Melalui Peta Go dalam Susunan Tertentu?. 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