Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyalin Dalam Peta Go dan Kosongkan Yang Asal Tanpa Menjejaskan Salinan?

Bagaimana untuk Menyalin Dalam Peta Go dan Kosongkan Yang Asal Tanpa Menjejaskan Salinan?

Susan Sarandon
Lepaskan: 2024-12-30 13:05:09
asal
497 orang telah melayarinya

How to Deep Copy a Go Map and Clear the Original Without Affecting the Copy?

Mencipta Peta Bersekutu dalam Go: Cara Menyalin Dalam dan Kosongkan Yang Asal

Dalam Go, anda cuba menyalin kandungan daripada peta yang dipanggil aMap ke dalam peta lain bernama aSuperMap. Selepas itu, anda ingin mengosongkan aMap untuk menerima nilai baharu dalam lelaran gelung seterusnya. Walau bagaimanapun, anda menghadapi isu mengosongkan peta tanpa mengosongkan rujukannya dalam aSuperMap.

Masalah dengan Rujukan

Kod pseudo anda menggambarkan bahawa apabila anda memadam item daripada aMap menggunakan delete(aMap, x), rujukan kepada item itu juga dialih keluar daripada aSuperMap. Ini kerana aSuperMap[y] memegang rujukan kepada aMap dan apabila anda mengubah suai aMap (dalam kes ini, dengan memadamkan item), anda sebenarnya mengubah suai data asas yang ditunjukkan oleh aSuperMap.

Peta Penyalinan Dalam

Untuk benar-benar membuat peta bersekutu dalam Go, anda perlu melakukan salinan peta. Ini melibatkan penciptaan objek peta baharu dengan salinan datanya sendiri, dan bukannya hanya memegang rujukan kepada peta asal.

Anda boleh mencapainya dengan mencipta gelung for secara manual yang berulang pada peta asal dan menambah setiap pasangan nilai kunci ke peta baharu:

for k, v := range originalMap {
    newMap[k] = v
}
Salin selepas log masuk

Dengan melakukan ini, anda mencipta peta baharu yang mengandungi data yang sama seperti peta asal, tetapi kedua-dua peta itu berasingan objek dengan salinan data mereka sendiri.

Mengosongkan Peta Asal

Setelah anda mempunyai salinan peta yang mendalam, anda boleh mengosongkan peta asal tanpa menjejaskan peta baharu. Untuk melakukan ini, anda boleh menggunakan fungsi set semula daripada pakej bekas/senarai:

for something := range fruits {
    aMap := make(map[string]aStruct)
    aSuperMap := make(map[string]map[string]aStruct)

    for x := range something {
        aMap[x] = aData
        aSuperMap[y] = aMap
        delete(aMap, x)
    }

    // Deep copy aMap into newMap
    newMap := make(map[string]aStruct)
    for k, v := range aMap {
        newMap[k] = v
    }

    // Clear the original aMap
    container/list.Reset(aMap)

    // Save the new map
    saveASuperMap(newMap)
}
Salin selepas log masuk

Dengan mengikuti langkah ini, anda boleh berjaya mencipta peta bersekutu dalam Go, lakukan salinan peta yang mendalam untuk mengekalkan data asal dan kosongkan peta asal untuk menerima nilai baharu dalam lelaran gelung seterusnya.

Atas ialah kandungan terperinci Bagaimana untuk Menyalin Dalam Peta Go dan Kosongkan Yang Asal Tanpa Menjejaskan Salinan?. 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