![cbd16c5449713df020a595f898368dff.png](https://i-blog.csdnimg.cn/blog_migrate/bdf89276af7a96ddbbc932bc0bcb0c32.jpeg)
切片作为常用的数据类型,插入元素的操作必不可少。那么今天就介绍几个关于切片插入元素的小技巧,这些技巧学会了,保证让你的程序飞起来!
1. 通过链式append 实现
将多个append
操作组合起来,实现在切片中间插入元素:
var a []int
// 在第i个位置插入1
a = append(a[:i], append([]int{1}, a[i:]...)...)
a = append(a[:i], append([]int{1,2,3}, a[i:]...)...)
每个链式操作中的第二个append
调用都会创建一个临时切片,并将a[i:]
的内容复制到新创建的切片中,然后将临时创建的切片再追加到a[:i]
。
2. 通过copy + append 实现
通过 copy
和append
组合 可以避免创建中间的临时切片
a = append(a, 0) // 切片扩展1个空间
copy(a[i+1:], a[i:]) // a[i:]向后移动1个位置
a[i] = x // 设置新添加的元素
用copy
和append
组合在中间位置插入多个元素(也就是插入一个切片):
a = append(a, x...) // 为x切片扩展足够的空间
copy(a[i+len(x):], a[i:]) // a[i:]向后移动len(x)个位置
copy(a[i:], x) // 复制新添加的切片
注:append
本质是用于追加元素而不是扩展容量,扩展切片容量只是append
的一个使用技巧。