golang 지도 요소 삭제

WBOY
풀어 주다: 2023-05-13 09:15:07
원래의
1560명이 탐색했습니다.

인터넷 산업에서 golang이 광범위하게 적용되면서 점점 더 많은 개발자가 고성능 애플리케이션을 구축하기 위해 golang을 사용하고 있습니다. 그 중 map은 golang의 중요한 타입 중 하나이며, 키-값 쌍을 빠르게 찾고 저장하는 방법을 제공합니다. 실제 적용에서는 맵에서 요소를 삭제해야 하는 경우가 종종 있습니다. 이 기사에서는 golang에서 지도 요소를 삭제하는 몇 가지 방법을 소개합니다.

1. 삭제 키워드를 사용하세요.

Golang은 지도의 요소를 삭제하는 내장 기능을 제공합니다. 구문은 다음과 같습니다.

delete(map, key)
로그인 후 복사

그 중 map은 삭제할 요소의 map 객체이고, key는 삭제하려는 요소의 키입니다. 다음은 delete 키워드를 사용하여 요소를 삭제하는 방법을 보여주는 간단한 예입니다.

package main

import "fmt"

func main() {
    m := map[string]int{
        "a": 1,
        "b": 2,
        "c": 3,
    }
    delete(m, "a")
    fmt.Println(m)
}
로그인 후 복사

출력 결과는 다음과 같습니다.

map[b:2 c:3]
로그인 후 복사
로그인 후 복사

위 예에서 볼 수 있듯이 delete를 사용하면 맵의 요소를 빠르게 삭제할 수 있습니다. 그러나 지정된 키가 맵에 없으면 삭제는 어떤 작업도 수행하지 않는다는 점에 유의해야 합니다.

2. 범위 순회를 사용하여 요소 삭제

경우에 따라 지도를 순회하고 조건을 충족하는 요소를 삭제해야 할 수도 있습니다. 이 경우 지도를 순회하면서 지도를 수정하면 오류가 발생하므로 직접 삭제를 사용하는 것은 불가능합니다. 이때 range를 이용하여 맵을 순회하여 삭제할 요소를 표시하고, 마지막으로 다시 맵을 순회하여 표시된 요소를 삭제할 수 있습니다. 다음은 범위 순회를 사용하여 요소를 삭제하는 방법을 보여주는 예입니다.

package main

import "fmt"

func main() {
    m := map[string]int{
        "a": 1,
        "b": 2,
        "c": 3,
    }
    deleteKeys := make([]string, 0)
    for k, v := range m {
        if v > 2 {
            deleteKeys = append(deleteKeys, k)
        }
    }
    for _, k := range deleteKeys {
        delete(m, k)
    }
    fmt.Println(m)
}
로그인 후 복사

출력 결과는 다음과 같습니다.

map[a:1 b:2]
로그인 후 복사

위 예에서는 먼저 범위를 사용하여 맵을 순회하고 일치하는 키를 슬라이스에 저장합니다. 그런 다음 range를 다시 사용하여 슬라이스를 순회하고 순서대로 삭제해야 하는 요소를 삭제합니다. 삭제할 키를 저장하기 위해 또 다른 슬라이스가 사용되며, 순회 중에 맵을 수정하면 오류가 발생하므로 맵 순회 시 직접 삭제할 수 없다는 점에 유의해야 합니다.

3. 동기적으로 요소를 삭제하려면 sync.Map을 사용하세요

고동시성 애플리케이션에서는 동시 읽기 및 쓰기 기능이 포함된 매핑을 사용해야 할 수 있으며, golang의 동기화 패키지는 스레드로부터 안전한 매핑 유형인 sync.Map을 제공합니다. sync.Map을 사용하여 요소를 삭제하는 것은 비교적 간단하며 동시 쓰기 중 읽기 및 쓰기 경쟁 문제를 걱정할 필요가 없습니다. 다음은 sync.Map을 사용하여 요소를 삭제하는 방법을 보여주는 예입니다.

package main

import (
    "fmt"
    "sync"
)

func main() {
    m := &sync.Map{}
    m.Store("a", 1)
    m.Store("b", 2)
    m.Store("c", 3)
    m.Range(func(k, v interface{}) bool {
        if k == "b" {
            m.Delete(k)
        }
        return true
    })
    m.Range(func(k, v interface{}) bool {
        fmt.Printf("%s:%v
", k, v)
        return true
    })
}
로그인 후 복사

출력은 다음과 같습니다.

a:1
c:3
로그인 후 복사

위 예에서는 먼저 sync.Map 객체를 생성하고 여기에 여러 키-값 쌍을 추가했습니다. 그런 다음 Range 메서드를 사용하여 맵을 탐색하고 조건을 충족하는 요소를 삭제합니다. 요소를 삭제할 때는 delete 키워드 대신 삭제 메서드를 사용해야 한다는 점에 유의하세요.

4. 지도의 새 할당 사용

위의 방법 외에도 지도 요소를 삭제하는 또 다른 일반적인 방법은 지도의 새 할당을 사용하는 것입니다. 이 방법의 아이디어는 새 지도 객체를 생성하고 유지해야 하는 요소를 새 지도 객체에 할당하는 것입니다. 다음은 map의 새 할당을 사용하여 요소를 삭제하는 방법을 보여주는 예입니다.

package main

import "fmt"

func main() {
    m := map[string]int{
        "a": 1,
        "b": 2,
        "c": 3,
    }
    newM := make(map[string]int)
    for k, v := range m {
        if k != "a" {
            newM[k] = v
        }
    }
    fmt.Println(newM)
}
로그인 후 복사

출력 결과는 다음과 같습니다.

map[b:2 c:3]
로그인 후 복사
로그인 후 복사

위 예에서는 먼저 새 빈 맵 객체 newM을 만든 다음 원본 맵을 반복합니다. object m, 삭제할 필요가 없는 요소는 newM에 할당됩니다. 이 방법은 맵에 요소가 적을 때 더 효과적이지만, 맵에 요소 수가 많으면 성능 저하가 발생한다는 점에 유의해야 합니다. 따라서 더 나은 성능을 얻으려면 맵의 요소를 삭제할 때 delete 또는 Range 방법을 사용하는 것이 좋습니다.

결론

golang에는 지도 요소를 삭제하는 방법이 많이 있습니다. 그 중 삭제는 가장 간단하고 일반적으로 사용되는 방법입니다. 정규화된 요소를 동기화해야 하는 시나리오에는 Range 방법이 적합합니다. Map은 동시성이 높은 애플리케이션에 적합합니다. map의 새 할당을 사용하면 맵의 요소가 삭제될 수 있지만 성능에 특정 오버헤드가 발생합니다. 특정 시나리오에 따라 애플리케이션의 성능과 가독성을 향상시키는 데 가장 적합한 방법을 선택할 수 있습니다.

위 내용은 golang 지도 요소 삭제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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