删除切片指定索引的元素(避免掉入切片坑)

删除切片指定索引处的元素应该是实际开发中经常遇到的功能
百度或者谷歌得到的答案经常是这样的

nums := []int{1, 2, 3, 4}
k := 2
res := append(nums[:k], nums[k+1:]...)

最后得到的答案确实是

res = [1, 2, 4]

但是,但是,但是...
请注意此时的 nums 等于 [1, 2, 4, 4],感兴趣的可以去运行下

所以,slice 真的要谨慎啊,大兄弟们
我习惯下面这种方式

nums := []int{1, 2, 3, 4}
k := 2

// res := nums[low:hight:max]
// len(res) = hight - low
// cap(res) = max - low
// 默认 max = cap(res)
res := append(nums[:k:k], nums[k+1:]...)

或者这样

nums := []int{1, 2, 3, 4}
k := 2

temp := make([]int, len(nums[:k]))
temp = copy(temp, nums[:k])
res := append(temp, nums[k+1:]...)
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!