go学习备忘录 - 切片中间插入元素

本文介绍了两种在Go语言中高效地在切片中间插入元素的方法:链式append和copy+append。链式append虽然简洁但会产生临时切片,而copy+append则能避免这种额外开销。通过实例代码详细展示了如何在指定位置插入单个元素或整个切片,帮助读者深入理解Go语言切片操作的底层机制。
摘要由CSDN通过智能技术生成

1. 通过链式append 实现

将多个append操作组合起来,实现在切片中间插入元素:

var a []int
a = append(a[:i], append([]int{1}, a[i:]...)...)     // 在第i个位置插入1
a = append(a[:i], append([]int{1,2,3}, a[i:]...)...) // 在第i个位置插入切片

每个链式操作中的第二个append调用都会创建一个临时切片,并将a[i:]的内容复制到新创建的切片中,然后将临时创建的切片再追加到a[:i]

2. 通过copy + append 实现

通过 copyappend组合 可以避免创建中间的临时切片

a = append(a, 0)     // 切片扩展1个空间
copy(a[i+1:], a[i:]) // a[i:]向后移动1个位置
a[i] = x             // 设置新添加的元素

copyappend组合在中间位置插入多个元素(也就是插入一个切片):

a = append(a, x...)       // 为x切片扩展足够的空间
copy(a[i+len(x):], a[i:]) // a[i:]向后移动len(x)个位置
copy(a[i:], x)            // 复制新添加的切片

注:append本质是用于追加元素而不是扩展容量,扩展切片容量只是append的一个副作用。

有趣有料有温度,和我一起学技术!

欢迎关注公众号 来思Go,收看更多赖克与甜甜的技术学习日常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值