注意

copy函数复制的元素个数=min(len(dest), len(src)) 来决定

删除

保持有序

即后面的元素经,都向前移动一个元素,然后删除最后一个元素即可.

package main

import (
	"fmt"
)

func remove(slice []int, i int) []int {
    // copy(dst, src)
    // det = slice[i:]   即为 2,3,4,5,6,7,8,9
    // src = slice[i+1:] 即为 3,4,5,6,7,8,9
    // copy完成为,slice 即为 0,1,3,4,5,6,7,8,9,9, slice[i:]即为 3,4,5,6,7,8,9,9
    // 所以 slice[:len(slice)-1] 即为 0,1,3,4,5,6,7,8,9
    copy(slice[i:], slice[i+1:])
    return slice[:len(slice)-1]
}

func main() {
    s := []int{0,1,2,3,4,5,6,7,8,9}
    s = remove(s, 2)
    fmt.Println(s)
}

输出的结果:

[Running] go run "/home/sky/go-dsp/src/test2/main.go"
[0 1 3 4 5 6 7 8 9]

[Done] exited with code=0 in 0.113 seconds

不需要保持有序

直接将最后一个元素,赋值给要被删除元素的位置,然后删除最后一个元素即可

package main

import (
	"fmt"
)

func remove(slice []int, i int) []int {
    slice[i] = slice[len(slice)-1]
    return slice[:len(slice)-1]
}

func main() {
    s := []int{0,1,2,3,4,5,6,7,8,9}
    s = remove(s, 2)
    fmt.Println(s)
}

输出的结果:

[Running] go run "/home/sky/go-dsp/src/test2/main.go"
[0 1 9 3 4 5 6 7 8]

[Done] exited with code=0 in 0.096 seconds

参考资料

gogl-zh