[map] 이동 중에지도 [키]를 삭제 하시겠습니까?

나는지도가있다 :

var sessions =  map[string] chan int{}

어떻게 삭제 sessions[key]합니까? 나는 시도했다 :

sessions[key] = nil,false;

작동하지 않았습니다.


업데이트 (2011 년 11 월) :

Go 버전 1 에서는 맵 항목을 삭제하기위한 특수 구문이 제거되었습니다 .

Go 1은 특수 맵 할당을 제거하고 새로운 내장 함수를 도입합니다 delete. : delete(m, x)식으로 검색된 맵 항목을 삭제합니다 m[x]. …



답변

이상하게도

package main

func main () {
    var sessions = map[string] chan int{};
    delete(sessions, "moo");
}

작동하는 것 같습니다. 그래도 자원을 제대로 사용하지 않는 것 같습니다!

다른 방법은 존재를 확인하고 값 자체를 사용하는 것입니다.

package main

func main () {
    var sessions = map[string] chan int{};
    sessions["moo"] = make (chan int);
    _, ok := sessions["moo"];
    if ok {
        delete(sessions, "moo");
    }
}


답변

Go 1 릴리스 정보 에서 복사

옛 언어로, 키를 사용하여 항목을 삭제 k로 표시지도에서 m, 하나는, 문을 썼다

m[k] = value, false

이 구문은 유일무이 한 2 대 1 과제 인 특별한 경우입니다. 평가되었지만 폐기 된 값 (보통 무시되는 값)과 거의 항상 상수 인 부울 값을 전달해야했습니다. 그것은 일을했지만 이상하고 논쟁의 포인트였습니다.

Go 1에서는 그 구문이 사라졌습니다. 대신 새로운 내장 함수 인 delete. 호출

delete(m, k)

식으로 검색된 맵 항목을 삭제합니다 m[k]. 반환 값이 없습니다. 존재하지 않는 항목을 삭제하면 아무런 문제가 없습니다.

업데이트 : 실행 go fix형태의 표현으로 변환됩니다 m[k] = value, false으로 delete(m, k)는 무시 값이 안전하게 프로그램에서 폐기 될 수 있다는 것을 분명 할 때 false미리 정의 된 부울 상수를 의미한다. 수정 도구는 프로그래머가 검사 할 다른 구문 사용을 표시합니다.


답변

에서 효과적인 이동 :

맵 항목을 삭제하려면 인수가 맵 및 삭제 될 키인 내장 함수 삭제 기능을 사용하십시오. 키가 이미지도에없는 경우에도이 작업을 수행하는 것이 안전합니다.

delete(timeZone, "PDT")  // Now on Standard Time

답변

delete(sessions, "anykey")

요즘에는 아무것도 부서지지 않을 것입니다.


답변

make (chan int)대신에 사용하십시오 nil. 첫 번째 값은지도와 동일한 유형이어야합니다.

package main

import "fmt"

func main() {

    var sessions = map[string] chan int{}
    sessions["somekey"] = make(chan int)

    fmt.Printf ("%d\n", len(sessions)) // 1

    // Remove somekey's value from sessions
    delete(sessions, "somekey")

    fmt.Printf ("%d\n", len(sessions)) // 0
}

업데이트 : 내 대답을 수정했습니다.


답변