小编典典

简直深深地复制了一片?

go

在Go中,深度复制切片的一种简洁/性能良好的方法是什么?我需要将切片复制到新的支持数组中,因为另一个数组由其他东西拥有,并且在复制后可能会被修改。

我目前正在这样做:

copy := append([]T{}, orig...)

T的元素类型在哪里orig


阅读 222

收藏
2020-07-02

共1个答案

小编典典

最快的方法似乎是在具有必要空间的切片后追加。我用基准测试结果扩展了@Anisus答案,并提供了最快的解决方案。

BenchmarkCopy            100000 18240 ns/op
BenchmarkAppend          100000 18276 ns/op
BenchmarkAppendPreCapped 100000 16407 ns/op

BenchmarkAppendPreCapped可能会避免切片归零和/或增大。看起来像这样:

copy := append(make([]T, 0, len(orig)), orig...)
2020-07-02