>백엔드 개발 >Golang >Go에서 지도 값 조각을 검색하는 더 효율적인 방법이 있습니까?

Go에서 지도 값 조각을 검색하는 더 효율적인 방법이 있습니까?

DDD
DDD원래의
2024-11-29 20:52:12826검색

Is There a More Efficient Way to Retrieve Map Value Slices in Go?

Go에서 맵 값 슬라이스 검색 최적화

Go에서는 맵에서 값 슬라이스를 얻는 것이 간단해 보일 수 있지만, 표시된 수동 반복 및 할당보다 더 효율적인 접근 방식 아래?

package main

import (
    "fmt"
)

func main() {
    m := make(map[int]string)

    m[1] = "a"
    m[2] = "b"
    m[3] = "c"
    m[4] = "d"

    // Manual iteration with pre-allocated slice
    v := make([]string, len(m), len(m))
    idx := 0
    for _, value := range m {
        v[idx] = value
        idx++
    }

    fmt.Println(v)
}

내장된 지도 기능 및 외부 기능

제공된 예는 지도의 값을 슬라이스로 변환하는 표준 방법입니다. Go는 이 작업을 위해 특별히 설계된 내장 기능을 제공하지 않습니다. 외부 패키지는 추가 기능을 제공할 수 있지만 명시적인 가져오기가 필요하며 수동 접근 방식만큼 효율적이지 않을 수 있습니다.

Append를 사용한 대체 구현

수동 반복 접근 방식은 효율적이기 때문에 미묘한 최적화가 가능합니다. 특정 인덱스에 값을 할당하는 대신 추가 기능을 사용하여 슬라이스를 동적으로 확장할 수 있습니다.

v := make([]string, 0, len(m))

for _, value := range m {
    v = append(v, value)
}

이 수정된 코드에서 v 슬라이스의 용량은 맵 길이 m으로 초기화됩니다. 이렇게 하면 루프 중에 추가가 새 메모리를 할당할 필요가 없으므로 실행 속도가 약간 빨라집니다.

결론

수동 반복 및 할당 접근 방식이 여전히 가장 효율적입니다. Go에서 맵의 값을 슬라이스로 변환하는 방법입니다. 그러나 추가를 사용한 대체 구현은 불필요한 메모리 할당을 줄여 약간의 성능 향상을 제공합니다.

위 내용은 Go에서 지도 값 조각을 검색하는 더 효율적인 방법이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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