2017-04-17 1 views
1

객체의 필드에 함수를 적용한 다음 결과를 새 슬라이스로 복사하는 더 좋은 방법이 있습니까? 더 나은 의미는 for 루프보다 나은 성능을 의미합니다. 같은Golang 슬라이스 할 객체의 요소 복사

var tmp []string 
for _, value := range some_object.some_field { 
    tmp = append(tmp, do_something(value)) 
} 

뭔가 : 결과 슬라이스 존재와

tmp := map_copy(do_something(some_object.some_field)) 

:

tmp[0] = do_something(some_object.some_value[0]) 
tmp[1] = do_something(some_object.some_value[1]) 
tmp[2] = do_something(some_object.some_value[2]) 
.... 
+0

는'map_copy' 단지에 대한 귀하를 포함하는 함수가 될 것이다 고리. 네가 무엇을 요구하는지 모르겠다. – JimB

+0

나는 그것을 직접 작성할 수있다. 그것은 더 성능 측면에 지시했다. 어쩌면 거기에 어떤 환상적인 내부에 내가 잘이 루프를보다 처리할지 모르겠다. 미안. – maax

+0

이 특정 질문과는 완전히 관련이 없지만 위키에 생략 줄을 추가하는 등 간단한 최적화가 몇 가지 있습니다. 여기를 읽으십시오 https://github.com/golang/go/wiki/SliceTricks – RayfenWindspear

답변

5

유일한 성능이 미리 올바른 슬라이스 용량을 할당되어 추가 할 수 증가한다.

당신은 여전히 ​​0 길이 슬라이스로 시작하여 추가로 값을 추가 할 수 있습니다 :

tmp := make([]string, 0, len(some_object.some_field)) 
for _, value := range some_object.some_field { 
    tmp = append(tmp, do_something(value)) 
} 

또는 직접 조각을 인덱싱하여 :

tmp := make([]string, len(some_object.some_field)) 
for i := range some_object.some_field { 
    tmp[i] = do_something(some_object.some_field[i]) 
} 
관련 문제