重新切片二维切片

时间:2019-08-16 16:09:24

标签: go slice

我遇到了一个问题,需要编辑二维切片的多个索引。

将以下数字想象成切片a [][]int的二维切片

0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6

问题是我想访问修改

0 1
1 2

作为子切片,我希望也要更改。我通过以下代码实现了这一点:

sub := a[:2]
for i := range sub {
    sub[i] = sub[i][:2]
}

现在fmt.Println(sub)打印[[0 1] [1 2]],但是问题是fmt.Println(a)正在打印[[0 1] [1 2] [2 3 4 5] [3 4 5 6]]

问题是,如何在不丢失任何数据的情况下访问此子切片?

2 个答案:

答案 0 :(得分:3)

如果您的目标是在使用sub时修改原始[] int切片元素,则将a的元素复制到新切片中。问题中的代码直接修改a

sub := make([][]int, 2)
for i := range sub {
    sub[i] = a[i][:2]
}

答案 1 :(得分:0)

只是找到了解决方案,但不知道这样做是否正确

sub := make([][]int, 2)
for i := range sub {
    sub[i] = a[i][:2]
}
sub[0][0] = "876"
fmt.Println(a)
fmt.Println(sub)

现在在输出中我有

[[876 1 2 3] [1 2 3 4] [2 3 4 5] [3 4 5 6]]
[[876 1] [1 2]]