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에서 요소를 삭제하면 두 맵이 동일한 기본 데이터를 참조하기 때문에 SuperMap에서도 해당 요소가 삭제됩니다.
솔루션
Go에서는 각 키와 값 쌍을 원본 맵에서 새 맵으로 수동으로 복사하려면 for 루프를 사용해야 합니다. map:
for k, v := range originalMap { newMap[k] = v }
이렇게 하면 원본 지도인 originalMap과 독립된 새 지도인 newMap이 생성됩니다.
원본 지도 지우기
지도의 전체 복사본을 만든 후 내장된 len()을 사용하여 원본 지도를 지울 수 있습니다. 기능:
length := len(aMap) for i := 0; i < length; i++ { for key := range aMap { delete(aMap, key) } }
이것은 SuperMap의 콘텐츠를 그대로 유지하면서 aMap에서 모든 요소를 제거합니다.
위 내용은 Go에서 지도를 딥 카피하고 지우는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!