Ruby 如何遍历nil数组?

Ruby 如何遍历nil数组?,ruby,iteration,null,Ruby,Iteration,Null,我试图设置一个包含所有nil值的数组,以便有人可以迭代每个值的序列,直到它到达末尾,然后显示更改后的数组 班级大 迪夫本 x=[nil,1,nil,2] y=0 x[y]==零?好:坏 y+=1 放x 终止 终止 我知道这可以简化。是否有方法覆盖数组中的每个值?如果我理解正确,您可以这样做: 班级大 迪夫本 x=[nil,1,nil,2] 这些台词没什么用 y=0 x[y]==零?好:坏 y+=1 放x 终止 终止 对你的第二个问题回答是:。例如: [1,2,3].fill0=>[0,0,0]

我试图设置一个包含所有nil值的数组,以便有人可以迭代每个值的序列,直到它到达末尾,然后显示更改后的数组

班级大 迪夫本 x=[nil,1,nil,2] y=0 x[y]==零?好:坏 y+=1 放x 终止 终止
我知道这可以简化。是否有方法覆盖数组中的每个值?

如果我理解正确,您可以这样做:

班级大 迪夫本 x=[nil,1,nil,2] 这些台词没什么用 y=0 x[y]==零?好:坏 y+=1 放x 终止 终止 对你的第二个问题回答是:。例如:

[1,2,3].fill0=>[0,0,0]
根据我在示例代码中看到的内容,下面是一些可能会有所帮助的东西

这是一种简单的方法,可以创建一个数组,如果您希望它具有一定的大小,并且填充了nil值:

如果要交织两个数组,例如一个为零的数组和另一个具有值的数组:

TOTAL_ELEMENTS = 5

([nil] * TOTAL_ELEMENTS).zip((1..TOTAL_ELEMENTS).to_a).flatten
=> [nil, 1, nil, 2, nil, 3, nil, 4, nil, 5]
根据下面的OPs评论,这是一款tic tac toe游戏,以下是一些创建x的方法:

两者都返回:

=> [nil, nil, nil, nil, nil, nil, nil, nil, nil]
如果将单元坐标作为从0的偏移接收,则该选项非常有用

对于tic tac toe网格,如果将单元格坐标作为行/列对获取,则三行三列可能更有用:

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网格, i、 e.[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的@instance变量,以及initialize方法的正确使用。

您的代码示例还不完整。请说明如何调用ben方法,以及预期的输出是什么。事实上,这看起来像是一个做作的例子,没有任何作用。你说得很对。我忘记调用该方法,因此它不完整。很抱歉,未能提供完整的代码。它应该被称为Big.new.ben,这就是我所说的。我发现[nil]*5,这是一种处理Array.new5的特殊方式,但结果是一样的……也许我不太清楚我想要得到什么。我在做一个技巧,用户将从数组0..8`x=[nil,nil,nil]`中选择一个数字,然后用户1选择0x=[nil,x,nil],然后用户2选择2x=[nil,x,O]你必须使用九个元素的单个数组,还是可以使用三个元素的数组,即x[0..2][0..2],我还添加了一些可能有用的东西,解释一下为什么在ben方法中注释掉中间行是可以的。OP可能不明白为什么。
ROWS = COLUMNS = 3

x = Array.new( ROWS * COLUMNS )            # for offsets
x = Array.new(ROWS) { Array.new(COLUMNS) } # for rows and columns
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]