使用循环的二维数组,奇怪的输出?
2D array using loops, bizarre output?
这是一个非常基本的问题,但我无法弄清楚发生了什么。我希望 V 中的嵌套 for
循环像在 C 和其他语言中一样工作。使用以下 for
循环构建二维数组 A
,我得到了意想不到的结果。我究竟做错了什么?
fn main () {
mut A := [[0].repeat(3)].repeat(4)
// A = [ [0,1,2], [1,2,3], [2,3,4], [3,4,5] ]
for i := 0; i < 4; i++ {
for j := 0 ; j < 3; j++ {
A[i][j] = i + j
println( '$i, $j, ${i + j}' )
}
}
for i := 0; i < 4; i++ { println(A[i]) }
}
这是我得到的:
0, 0, 0
0, 1, 1
0, 2, 2
1, 0, 1
1, 1, 2
1, 2, 3
2, 0, 2
2, 1, 3
2, 2, 4
3, 0, 3
3, 1, 4
3, 2, 5
[3, 4, 5]
[3, 4, 5]
[3, 4, 5]
[3, 4, 5]
您的数组包含同一行对象的多个副本。当您修改一个值时,您会为所有行修改它。为每一行创建一个新对象
fn main () {
mut A := [[0].repeat(3)].repeat(4)
// A = [ [0,1,2], [1,2,3], [2,3,4], [3,4,5], [4,5,6] ]
for i := 0; i < 4; i++ {
A[i] = [0].repeat(3)
for j :=0 ; j < 3; j++ {
A[i][j] = i + j
println( '$i, $j, ${i + j}' )
}
}
for i := 0; i < 4; i++ { println(A[i]) }
}
这是一个非常基本的问题,但我无法弄清楚发生了什么。我希望 V 中的嵌套 for
循环像在 C 和其他语言中一样工作。使用以下 for
循环构建二维数组 A
,我得到了意想不到的结果。我究竟做错了什么?
fn main () {
mut A := [[0].repeat(3)].repeat(4)
// A = [ [0,1,2], [1,2,3], [2,3,4], [3,4,5] ]
for i := 0; i < 4; i++ {
for j := 0 ; j < 3; j++ {
A[i][j] = i + j
println( '$i, $j, ${i + j}' )
}
}
for i := 0; i < 4; i++ { println(A[i]) }
}
这是我得到的:
0, 0, 0
0, 1, 1
0, 2, 2
1, 0, 1
1, 1, 2
1, 2, 3
2, 0, 2
2, 1, 3
2, 2, 4
3, 0, 3
3, 1, 4
3, 2, 5
[3, 4, 5]
[3, 4, 5]
[3, 4, 5]
[3, 4, 5]
您的数组包含同一行对象的多个副本。当您修改一个值时,您会为所有行修改它。为每一行创建一个新对象
fn main () {
mut A := [[0].repeat(3)].repeat(4)
// A = [ [0,1,2], [1,2,3], [2,3,4], [3,4,5], [4,5,6] ]
for i := 0; i < 4; i++ {
A[i] = [0].repeat(3)
for j :=0 ; j < 3; j++ {
A[i][j] = i + j
println( '$i, $j, ${i + j}' )
}
}
for i := 0; i < 4; i++ { println(A[i]) }
}