我在使用 Golang slice 时遇到了一些问题。
我知道 slice 是指向底层数组的指针,但有些行为感觉有点奇怪。
我试图从一个 slice 中删除一个项目,我设法通过复制 slice 来做到这一点,有没有更好的方法?
在下面的代码中,原始 slice 发生了变化。
package main
import (
"fmt"
)
func main() {
mySlice := []int{1,2,3,4,5,6}
pos := 3
slicePart1 := mySlice[:pos+1]
slicePart2 := mySlice[pos+2:]
fmt.Println(mySlice)
fmt.Println(slicePart1)
fmt.Println(slicePart2)
new := append(slicePart1,slicePart2...)
fmt.Println(new)
fmt.Println(mySlice)
}
最佳答案
例如,
package main
import "fmt"
func main() {
s := []int{1, 2, 3, 4, 5, 6}
fmt.Println(s)
i := 3
fmt.Println(i)
s = append(s[:i], s[i+1:]...)
fmt.Println(s)
}
Playground :https://play.golang.org/p/SVQEUE7Rrei
输出:
[1 2 3 4 5 6]
3
[1 2 3 5 6]
或者,如果顺序不重要,
package main
import "fmt"
func main() {
s := []int{1, 2, 3, 4, 5, 6}
fmt.Println(s)
i := 3
fmt.Println(i)
s[i] = s[len(s)-1]
s = s[:len(s)-1]
fmt.Println(s)
}
Playground :https://play.golang.org/p/lVgKew3ZJNF
输出:
[1 2 3 4 5 6]
3
[1 2 3 6 5]
其他几种方式,参见SliceTricks .
关于go - 从 slice 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52806628/