韩槑槑

Go 删除切片指定索引的元素

字数统计: 191阅读时长: 1 min
2018/11/09 Share

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

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

最后得到的答案确实是

1
res = [1, 2, 4]

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

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

1
2
3
4
5
6
7
8
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:]...)

或者这样

1
2
3
4
5
6
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:]...)

CATALOG