2017-04-17 56 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

與這個特定問題並不完全相關,但是wiki上有許多切片技巧,揭示了一些簡單的優化,例如使用省略號追加。請閱讀https://github.com/golang/go/wiki/SliceTricks – RayfenWindspear

回答

5

唯一的性能提升,你可以添加被提前分配正確的扇區的容量。通過直接索引片

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

或者:

您仍然可以與附加與長度爲0片開始增加值

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