我正在用Ruby构建一个Chess程序,我的Square对象是一个多维数组。
class Square
attr_accessor :piece_on_square, :x, :y, :coordinates
def initialize(piece_on_square=nil, x=nil, y=nil, coordinates=nil)
@piece_on_square = piece_on_square
@x = x
@y = y
@coordinates = coordinates
end
end
@square_array = Array.new(8){Array.new(8){Square.new}}
当我尝试在@square_array
中选择与条件匹配的Square对象(例如coordinates
"a4"
的方格时,问题出现了。我尝试使用嵌套#each_with_index
调用#select
,但这不起作用。我只能选择数组本身,而不是数组中的对象。最好的方法是什么?
答案 0 :(得分:3)
我看到许多人为了做这种事情而构建嵌套数组,遇到了因使用嵌套数组而产生的各种问题。显而易见的解决方案是:摆脱嵌套数组,并使用平面数组。
如果我要进行这样的编程,我会使用一个平面数组,并使用数组索引和模运算进行行/列操作(Fixnum#%
用于列,Fixnum#/
用于行。< / p>
但是在你的情况下,你似乎是为每个方块保存了列号和行号,甚至是坐标名,所以你更容易使用一个平面哈希与行列组合或坐标名称作为键。