Go 是否删除切片导联中的元素?是否更改原始切片的导联?
我只是展示了代码,非常简单 但我得到了:Go 是否删除切片导联中的元素?是否更改原始切片的导联?,go,Go,我只是展示了代码,非常简单 但我得到了: [2 3 4 5 6] [2 4 5 6 6] [2 4 6 6 6] [2 4 6 6 6] [2 4 6 6 6] [2 4 6 6 6] 为什么??go说,如果slice的容量不够,它将为元素生成realloc,我甚至更改了origin slice中的任何内容 谁能解释一下这是怎么发生的吗?我想我知道为什么 切片a[:i]将返回一个容量大小为6的切片(作为原始切片),因此追加不会重新定位新切片,而是使用原始切片 b := append(a[:i
[2 3 4 5 6]
[2 4 5 6 6]
[2 4 6 6 6]
[2 4 6 6 6]
[2 4 6 6 6]
[2 4 6 6 6]
为什么??go说,如果slice的容量不够,它将为元素生成realloc,我甚至更改了origin slice中的任何内容
谁能解释一下这是怎么发生的吗?我想我知道为什么
切片a[:i]将返回一个容量大小为6的切片(作为原始切片),因此追加不会重新定位新切片,而是使用原始切片
b := append(a[:i], a[i+1:]...)
此代码将更改一个切片。
我的代码:
func main(){
a:=[]int{1,2,3,4,5,6}
对于i:=0;i
您可以使用copy:b:=append(a[:i],a[i+1:]…)完成所需操作,当然,此代码将更改a
[2 3 4 5 6]
[2 4 5 6 6]
[2 4 6 6 6]
[2 4 6 6 6]
[2 4 6 6 6]
[2 4 6 6 6]
b := append(a[:i], a[i+1:]...)
func main() {
a := []int{1, 2, 3, 4, 5, 6}
for i := 0; i < len(a); i++ {
a1 := make([]int,6)
copy(a1, a)
b := make([]int,5)
b = a1[:i]
b = append(b, a1[i+1:]...)
fmt.Println(b)
}
fmt.Println(a)
}