如何在Ruby中为二维数组赋值

时间:2013-12-21 23:51:04

标签: ruby arrays indexing

我有一个像这样生成的二维数组:

two_dimensional = Array.new(3){Array.new(5, 0)}

two_dimensional.each {|a| p a}生成后:

[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]

我的坐标是这样的(x,y)。如何将(x,y)分配给two_dimensional?

如果我two_dimensional[2][0] = 1为了这一点:(2,0)我希望如此:

[0,0,1,0,0]
[0,0,0,0,0]
[0,0,0,0,0]

但是生成的是:

[0,0,0,0,0]
[0,0,0,0,0]
[1,0,0,0,0]

我希望你明白我想要实现的目标。

3 个答案:

答案 0 :(得分:2)

如果您有3x3阵列

a = [0,1,3]
    [4,5,6]
    [7,8,9]

这意味着

a = [[0,1,3], [4,5,6], [7,8,9]]

所以如果你想要a[1][2]

a[1] = [4,5,6]

所以

a[1][2] = 6

回想一下,索引从零开始。

一种容易记住的方法是将一维数组表示为行,而不是列。

答案 1 :(得分:1)

你的行和列已经颠倒了。

答案 2 :(得分:0)

对于特定问题,您可以替换xy的位置,例如:

two_dimensional[0][2] = 1

但对于具有更广阔视角的系统而言,这不是一个好的解决方案。您正在混合两个系统:一个数组由行组成,另一个数组由列组成。

你必须决定一个,不要混。坚持一个系统。如果您认为您想要以您建议的方式访问,那么从一开始就将数组转换。而不是:

two_dimensional = Array.new(3){Array.new(5, 0)}

做的:

two_dimensional = Array.new(5){Array.new(3, 0)}

并且只要您想要显示它,就可以使用transpose方法。