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