Go 中的深度複製和清除映射
在使用關聯資料結構時,通常需要建立映射的深度複製和然後清除原來的值以接受新值。然而,在 Go 中,簡單地將參考指派給映射不會建立深層複製,從而導致清除原始映射的問題。
問題
考慮以下程式碼:
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) } // Save aSuperMap }
在此程式碼中,我們嘗試將aMap 的深層副本建立到aSuperMap 中,然後清除aMap,以便它可以採用新的價值觀。但是,從 aMap 中刪除元素也會從 aSuperMap 中刪除它,因為兩個映射都引用相同的基礎資料。
解決方案
建立a 的真正深層副本Go中的map,必須使用for循環手動將每個鍵值對從原始map複製到新的map map:
for k, v := range originalMap { newMap[k] = v }
這將建立一個新地圖newMap,它獨立於原始地圖OriginalMap。
清除原始地圖
建立地圖的深層副本後,可以使用內建的len() 清除原始地圖函數:
length := len(aMap) for i := 0; i < length; i++ { for key := range aMap { delete(aMap, key) } }
這將從aMap 中刪除所有元素,同時保持aSuperMap 的內容完好無損。
以上是如何在Go中深度複製和清除地圖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!