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

Bagaimana untuk Menyalin Dalam Peta Go Tanpa Menjejaskan Peta Asal?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-25 16:18:11269semak imbas

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

Menyalin Peta Dalam Tanpa Merosakkan Yang Asal

Dalam Go, cuba menyalin peta dengan memberikan rujukan seperti aSuperMap[y] = aMap boleh membawa kepada akibat yang tidak diingini. Untuk mencipta peta bersekutu tanpa menjejaskan penyalinan yang asal dan mendalam diperlukan.

Masalahnya

Contoh yang disediakan cuba menyalin kandungan aMap ke dalam aSuperMap dan kemudian kosongkan aMap. Walau bagaimanapun, memadamkan entri daripada aMap (delete(aMap, x)) juga mengalih keluar rujukannya daripada aSuperMap. Ini mengakibatkan supermap mengandungi data pendua atau menjadi tidak konsisten.

Penyelesaian: Penyalinan Dalam

Untuk mengelakkan pengubahsuaian peta asal semasa membuat perubahan pada salinan, penyalinan dalam adalah digunakan. Dalam gelung untuk:

for k, v := range originalMap {
  newMap[k] = v
}

Setiap pasangan nilai kunci daripada OriginalMap disalin secara individu ke dalam newMap. Proses ini mencipta peta baharu dan bebas yang tidak dipautkan dengan peta asal. Peta asal kemudiannya boleh dikosongkan tanpa menjejaskan salinan.

Contoh

Contoh berikut menunjukkan penyalinan dalam peta:

originalMap := map[string]int{"one": 1, "two": 2}

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

// Clear the original map
originalMap = make(map[string]int)

// Verify that newMap is independent of originalMap
newMap["three"] = 3
fmt.Println(newMap) // {one: 1, two: 2, three: 3}
fmt.Println(originalMap) // {}

Dalam contoh ini, penyalinan mendalam membolehkan newMap diubah suai dan dilanjutkan secara bebas daripada OriginalMap, memastikan integriti kedua-dua peta adalah dikekalkan.

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