提问人:syoui jyo 提问时间:12/28/2022 最后编辑:ainsyoui jyo 更新时间:12/28/2022 访问量:113
如何将元素从一个切片移动到另一个切片
How to move elements from one slice to another
问:
package main
import (
"fmt"
)
func main() {
arr0 := []int{
1,2,3,4,5,
}
arr1 := []int{}
fmt.Println(arr0)
fmt.Println(arr1)
fmt.Println("transferring...")
transfer(&arr0, &arr1)
fmt.Println(arr0)
fmt.Println(arr1)
}
func transfer(arr0 *[]int, arr1 *[]int) {
tmp := make([]int, 0)
for i:=0;i<len(*arr0);i++ {
tmp = append(tmp, (*arr0)[i])
}
arr1 = &tmp
s := make([]int, 0)
arr0 = &s
}
对于传输功能,我打算将切片 arr0 的元素传输到切片 arr1 和空切片 arr0
但它没有成功
这是我的输出
[1 2 3 4 5]
[]
transferring...
[1 2 3 4 5]
[]
转移后,我需要以下结果。 [] [1 2 3 4 5] 但实际上,main 函数中的 arr0 和 arr1 保持原样!
有人可以告诉我为什么这不行吗?
我在记忆里想,应该是这样的
运行传递函数后
答:
2赞
jacobsa
12/28/2022
#1
这两行:
arr1 = &tmp
arr0 = &s
更改局部变量和函数内部。这些变量恰好是指针,但它们只是 提供的输入指针的副本,它们不是对输入指针的引用。arr1
arr0
main
如果更改了 和 指针指向的内容,而不是指针本身,则会看到对 以下项提供的值的更改:arr1
arr0
main
*arr1 = tmp
*arr0 = s
3赞
slaff.bg
12/28/2022
#2
@jacobsa给出了一个很好的答案。
请记住这一点。您可以达到相同的效果,但性能更好。Golang 为此提供了绝佳的机会。
package main
import (
"fmt"
)
func main() {
arr0 := []int{
1, 2, 3, 4, 5,
}
arr1 := []int{}
fmt.Println(arr0)
fmt.Println(arr1)
fmt.Println("transferring...")
transfer(&arr0, &arr1)
fmt.Println(arr0)
fmt.Println(arr1)
}
func transfer(arr0 *[]int, arr1 *[]int) {
*arr0, *arr1 = *arr1, *arr0
}
评论
1赞
syoui jyo
12/28/2022
实际上我想这样做 [1,2,3,4,5], [] 到 [], [5,4,3,2,1] 而,没关系
上一个:追加到指针切片
下一个:切片到指针映射重复值
评论