您可以通过组合两个范围来创建嵌套数组吗?

我目前正在创建一个国际象棋游戏,我正在为每个包含合法移动集的国际象棋棋子设置一个数组。例如,主教只能对角移动,因此移动集需要如下才能在左上对角线上移动。

[[-1, -1], [-2, -2] ...repeated... [-7, -7], [-8, -8]]

有没有一种方法可以创建一个具有两个范围的嵌套数组,而不是每个方向都有很长的代码行?

例如:

([-1, -1])..([-8, -8])

回答

Enumerable#zip 结合两个枚举。

(-8..-1).zip(-8..-1).reverse
  # => [[-1, -1], [-2, -2], [-3, -3], [-4, -4], [-5, -5], [-6, -6], [-7, -7], [-8, -8]]


回答

也许 OT,但你可以用不同的方法完成相同的结果,这可能对其他棋子有所帮助。

例如:

(1..8).map { |n| [-n, -n] }
#=> [[-1, -1], [-2, -2], [-3, -3], [-4, -4], [-5, -5], [-6, -6], [-7, -7], [-8, -8]]

或者也:

8.times.map { |n| [-n-1, -n-1] }
#=> [[-1, -1], [-2, -2], [-3, -3], [-4, -4], [-5, -5], [-6, -6], [-7, -7], [-8, -8]]


以上是您可以通过组合两个范围来创建嵌套数组吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>