使用each_with_index迭代数组而不使用单独的索引变量

时间:2014-10-23 14:42:01

标签: ruby arrays

我试图弄清楚如何重构下面的代码,以便我可以在不使用“index1”和“index2”变量的情况下遍历数组来跟踪我的进度。

  board.each do |cell|
    diag1 << cell[index1]
    diag2 << cell[index2]
    index1 += 1
    index2 -= 1
  end

我尝试使用.each_with_index(见下文),但我不知道如何增加“i”的值。

  board.each_with_index do |cell, i|
    diag1 << cell[i += 1]
    diag2 << cell[i -= 1]
  end

数组“board”是tic-tac-to游戏的n * n数组,其大小至少为3x3或更大,并且应该检查代码块以查看是否存在对角线匹配。提前谢谢!

编辑:想出来。以下是工作代码段:

  board.each_with_index do |cell, i|
    diag1 << cell[i]
    diag2 << cell[-(i +1)]
  end

1 个答案:

答案 0 :(得分:1)

你可以这样做:

diag1, diag2 = board.map.with_index {|row, i| [row[i],row[-i-1]]}.transpose

我在这里使用的主要技巧是数组解释否定参数的方式。 array[-1]始终表示数组的最后一个元素,array[-2]表示倒数第二个等。