.clear()
기본 유형에 대한 C ++ 함수와 같은 것을 찾고 map
있습니다.
아니면 그냥 새 맵을 만들어야합니까?
업데이트 : 귀하의 답변에 감사드립니다. 답변을 살펴보면서 나는 때때로 새지도를 만들면 우리가 원하지 않는 불일치가 발생할 수 있음을 깨달았습니다. 다음 예를 고려하십시오.
var a map[string]string
var b map[string]string
func main() {
a = make(map[string]string)
b=a
a["hello"]="world"
a = nil
fmt.Println(b["hello"])
}
내 말은, 이것은 .clear()
객체의 내용을 지우는 C ++ 의 함수와 는 여전히 다릅니다 .
답변
아마도 새지도를 만들어야 할 것입니다. 동일한 맵이 여러 코드 조각에 의해 참조되고 한 조각이이 변경 사항이 다른 코드 조각에 표시되도록 명시 적으로 값을 지워야하는 경우가 아니라면 기존 맵을 지우려고 노력할 실제 이유가 없습니다.
그래서 예, 당신은 아마도
mymap = make(map[keytype]valtype)
어떤 이유로 든 기존지도를 정말로 지워야하는 경우 다음과 같이 간단합니다.
for k := range m {
delete(m, k)
}
답변
C ++와 달리 Go는 가비지 수집 언어입니다. 조금 다르게 생각해야합니다.
새지도를 만들 때
a := map[string]string{"hello": "world"}
a = make(map[string]string)
원래 맵은 결국 가비지 수집됩니다. 수동으로 지울 필요가 없습니다. 그러나 맵 (및 슬라이스)은 참조 유형이라는 것을 기억하십시오. 당신은 그들을 만들 make()
. 기본 맵은 참조가없는 경우에만 가비지 수집됩니다. 따라서 할 때
a := map[string]string{"hello": "world"}
b := a
a = make(map[string]string)
원래 배열은 가비지 수집되지 않습니다 (b가 가비지 수집되거나 b가 다른 것을 참조 할 때까지).
답변
// Method - I , say book is name of map
for k := range book {
delete(book, k)
}
// Method - II
book = make(map[string]int)
// Method - III
book = map[string]int{}
답변
루프에서이 작업을 수행하려는 경우 초기화를 활용하여 맵을 지울 수 있습니다. 예를 들면 :
for i:=0; i<2; i++ {
animalNames := make(map[string]string)
switch i {
case 0:
animalNames["cat"] = "Patches"
case 1:
animalNames["dog"] = "Spot";
}
fmt.Println("For map instance", i)
for key, value := range animalNames {
fmt.Println(key, value)
}
fmt.Println("-----------\n")
}
이것을 실행하면 이전 맵을 지우고 빈 맵으로 시작합니다. 이는 출력으로 확인됩니다.
$ go run maptests.go
For map instance 0
cat Patches
-----------
For map instance 1
dog Spot
-----------