>백엔드 개발 >Golang >Go의 지도에서 키를 효율적으로 검색하는 방법은 무엇입니까?

Go의 지도에서 키를 효율적으로 검색하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-07 04:18:12506검색

How to Efficiently Retrieve Keys from Maps in Go?

Go에서 지도 키를 얻는 방법

Go의 강력한 타이핑 시스템을 사용하면 인터페이스 유형의 키로 지도를 가져오는 기능{}을 지도에 적용할 수 없습니다. int 유형의 키를 사용합니다. Go는 현재 제네릭을 지원하지 않지만 여러 가지 방법으로 일반 Keys 기능을 구현할 수 있습니다.

옵션 1: 지도 유형 변환

지도 유형을 유지하려면 다음을 수행하세요. map[int]interface{} 인수를 사용하고 명시적으로 키를 인터페이스로 변환하도록 Keys 함수를 수정합니다.{}:

func Keys(m map[int]interface{}) []interface{} {
    keys := make([]interface{}, len(m))
    i := 0
    for k := range m {
        keys[i] = k
        i++
    }
    return keys
}

옵션 2: 사용 반사

또는 Go의 반사 패키지를 사용하여 지도의 키에 액세스하고 이를 인터페이스로 변환할 수 있습니다{}. 그러나 이 접근 방식은 성능에 영향을 미칠 수 있습니다.

func Keys(m interface{}) []interface{} {
    t := reflect.TypeOf(m)
    if t.Kind() != reflect.Map {
        panic("argument must be a map")
    }
    keys := make([]interface{}, 0)
    for _, key := range reflect.ValueOf(m).MapKeys() {
        keys = append(keys, key.Interface())
    }
    return keys
}

옵션 3: 일반 도우미 함수 정의

잠재적인 성능 문제를 방지하기 위해 맵[ int]인터페이스{}를 map[인터페이스{}]인터페이스{}로:

func convertMap[K1 comparable, V1 any, K2 comparable, V2 any](m map[K1]V1) map[K2]V2 {
    ret := make(map[K2]V2, len(m))
    for k, v := range m {
        ret[k.(K2)] = v.(V2)
    }
    return ret
}

// Keys returns the keys of the provided map.
func Keys[K comparable, V any](m map[K]V) []K {
    keys := make([]K, len(m))
    i := 0
    for k := range m {
        keys[i] = k
        i++
    }
    return keys
}

이러한 도우미 함수를 사용하면 다음을 사용할 수 있습니다. 다음 코드:

m2 := map[int]interface{}{
    2: "string",
    3: "int",
}
convertedMap := convertMap(m2)
result := Keys(convertedMap)
fmt.Println(result)

위 내용은 Go의 지도에서 키를 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.