鉴于
array1 := []int{1, 3, 4, 5}
array2 := []int{2, 4, 6, 8}
I want to insert array2[2]
ie 6
at array1[1]
ie before 3
so that array1
becomes a slice of {1, 6, 3, 4, 5}
。我该怎么做?
我在网上阅读的大多数技术都涉及使用 :
运算符,但也会导致插入剩余元素。如何在切片的索引处附加单个值?
原文由 chefcurry7 发布,翻译遵循 CC BY-SA 4.0 许可协议
简单,高效和合乎逻辑的方式:
array1
有足够的容量(长度)来容纳新的可插入元素。为此,请使用append()
添加单个元素(不管那是什么,它都会被覆盖)。copy()
(您要在之前插入的元素)。在代码中:
输出(在 Go Playground 上尝试):
特殊情况下的优化
请注意,在某些特殊情况下(当 slice 元素很大时,比如一个大结构),追加最后一个元素可能会更快,然后复制少 1 个元素就足够了(因为追加的最后一个元素就在它需要的地方成为)。
这是它的样子:
这将产生相同的切片。在 Go Playground 试试这个。