Golang中的copy使用
Contents
注意
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