我试图弄清楚如何重构下面的代码,以便我可以在不使用“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
答案 0 :(得分:1)
你可以这样做:
diag1, diag2 = board.map.with_index {|row, i| [row[i],row[-i-1]]}.transpose
我在这里使用的主要技巧是数组解释否定参数的方式。 array[-1]
始终表示数组的最后一个元素,array[-2]
表示倒数第二个等。