您可以通过组合两个范围来创建嵌套数组吗?
我目前正在创建一个国际象棋游戏,我正在为每个包含合法移动集的国际象棋棋子设置一个数组。例如,主教只能对角移动,因此移动集需要如下才能在左上对角线上移动。
[[-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]]