> 백엔드 개발 > Golang > Go에서 지도를 딥 카피하고 지우는 방법은 무엇입니까?

Go에서 지도를 딥 카피하고 지우는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-29 17:46:11
원래의
319명이 탐색했습니다.

How to Deep Copy and Clear Maps in Go?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿