如何解决如何将切片“附加”或“复制”到golang中的2D切片?
我想将切片数据添加到2D切片:
var a_slice []int
var b_slice [][]int
for i:=0; i<num; i++{
a_slice = some_function()
b_slice = append(b_slice,a_slice)
}
但是最后b_slice具有相同的内容,最后一个“ some_funtion”返回了值。
例如,
i=0,result:a_slice:[1,1,1],b_slice:[1,1];
i=1,result:a_slice:[2,2,2],b_slice:[2,2][2,2];
i=2,result:a_slice:[3,3,3],b_slice:[3,3][3,3];
这不是我想要的。我想要[[1,1] [2,2] [3,3]]。
我尝试了“复制”,但也没有解决方案。我记得“复制”功能可以进行深层复制。 “追加”功能还将分配新数据(而非指针)存储以进行深度复制。我尝试了(希望将分配新的内存并深度复制原始数据),但结果相同。
因此,我怀疑“附加”和“复制”功能不能用于2D切片吗?
为什么会发生这种情况以及如何完成这项任务?
(“ some_function”是fmt.Fscan。原始代码如下:
var a_slice = make([]int,3)
var iface_slice = make([]interface{},3)
var b_slice=make([][]int,3)
for i:= range a_slice{
iface_slice[i] = &a_slice[i]
}
for i:=0; i<num; i++{
if _,err := fmt.Fscan(f,iface_slice...); err != nil{
return err
}else{
b_slice = append(b_slice,a_slice)
}
}
)
解决方法
也许您正在突变a_slice
尝试在循环中声明a_slice
的新实例,以使您的函数不会覆盖先前的实例。
var b_slice [][]int
for i:=0; i<num; i++{
var a_slice []int
a_slice = some_function()
b_slice = append(b_slice,a_slice)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。