원본을 손상시키지 않고 지도 심층 복사
Go에서 aSuperMap[y] =와 같은 참조를 할당하여 지도 복사를 시도합니다. aMap은 의도하지 않은 결과를 초래할 수 있습니다. 원본에 영향을 주지 않고 연관 맵을 생성하려면 딥 카피가 필요합니다.
문제
제공된 예제에서는 aMap의 내용을 SuperMap에 복사한 다음 지우려고 시도합니다. aMap. 그러나 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) // {}
In 이 예에서는 깊은 복사를 통해 newMap을 OriginalMap과 독립적으로 수정 및 확장할 수 있으므로 두 맵의 무결성이 유지됩니다.
위 내용은 원본에 영향을 주지 않고 바둑 지도를 딥 카피하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!