根据我在示例代码中看到的内容,这里有一些可能会有所帮助的事情。
如果您希望数组具有一定大小并填充nil 值,这是一种创建数组的简单方法:
foo = [nil] * 5
=> [nil, nil, nil, nil, nil]
如果你想交织两个数组,比如一个 nil 数组和另一个带值的数组:
TOTAL_ELEMENTS = 5
([nil] * TOTAL_ELEMENTS).zip((1..TOTAL_ELEMENTS).to_a).flatten
=> [nil, 1, nil, 2, nil, 3, nil, 4, nil, 5]
根据下面的 OP 评论,这是一个井字游戏,这里有一些创建 x 的方法:
Array.new(9)
[nil] * 9
两者都返回:
=> [nil, nil, nil, nil, nil, nil, nil, nil, nil]
如果您将单元格坐标接收为从 0 开始的偏移量,这将非常有用。
对于井字游戏网格,如果您将单元格坐标作为行/列对获取,则三行三列可能会更有用:
Array.new(3) { Array.new(3) }
[[nil] * 3] * 3
返回:
=> [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]
还有一些需要思考的事情:
ROWS = COLUMNS = 3
x = Array.new( ROWS * COLUMNS ) # for offsets
x = Array.new(ROWS) { Array.new(COLUMNS) } # for rows and columns
如果您将位置作为偏移量但想将其转换为行/列,
使用divmod。您的偏移量将为 0..8,被转换为适合 3x3 网格,
即[0..2][0..2]。转换回来也很容易:
def row_col_to_offset(x,y)
x * ROW + y
end
>> row_col_to_offset(0,0) # => 0
>> row_col_to_offset(0,1) # => 1
>> row_col_to_offset(1,1) # => 4
>> row_col_to_offset(2,2) # => 8
def offset_to_row_col(o)
o.divmod(ROW)
end
>> offset_to_row_col(0) # => [0, 0]
>> offset_to_row_col(1) # => [0, 1]
>> offset_to_row_col(4) # => [1, 1]
>> offset_to_row_col(8) # => [2, 2]
现在你需要了解一下Ruby的@实例变量,以及initialize方法的正确使用。