在 Go 中重新切片 2D 切片



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

将以下数字想象为切片的 2-D 切片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]]

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

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

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

刚刚找到一个解决方案,但不知道它是否是正确的方法

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]]