2017-04-17 142 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]) 
}