在不破壞原始地圖的情況下深度複製地圖
在Go 中,嘗試透過分配像aSuperMap[y] = 這樣的引用來複製地圖aMap 可能會導致意想不到的後果。要建立關聯映射而不影響原始映射,需要進行深度複製。
問題
提供的範例嘗試將 aMap 的內容複製到 aSuperMap 中,然後清除一個地圖。但是,從 aMap 中刪除條目 (delete(aMap, x)) 也會從 aSuperMap 中刪除其參考。這會導致超級圖包含重複資料或變得不一致。
解決方案:深度複製
為了避免在更改副本時修改原始地圖,深度複製是用過的。在 for 迴圈中:
for k, v := range originalMap { newMap[k] = v }
originalMap 中的每個鍵值對都被單獨複製到 newMap 中。此過程會建立一個新的獨立地圖,不連結到原始地圖。然後可以清除原始地圖而不影響副本。
範例
以下範例示範深度複製地圖:
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) // {}
中在這個範例中,深度複製允許newMap 獨立於originMap 進行修改和擴展,確保保持兩個映射的完整性。
以上是如何在不影響原圖的情況下深度複製Go Map?的詳細內容。更多資訊請關注PHP中文網其他相關文章!