我有一个像这样生成的二维数组:
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]
我希望你明白我想要实现的目标。
答案 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)
对于特定问题,您可以替换x
和y
的位置,例如:
two_dimensional[0][2] = 1
但对于具有更广阔视角的系统而言,这不是一个好的解决方案。您正在混合两个系统:一个数组由行组成,另一个数组由列组成。
你必须决定一个,不要混。坚持一个系统。如果您认为您想要以您建议的方式访问,那么从一开始就将数组转换。而不是:
two_dimensional = Array.new(3){Array.new(5, 0)}
做的:
two_dimensional = Array.new(5){Array.new(3, 0)}
并且只要您想要显示它,就可以使用transpose
方法。