我正在尝试向ruby中的二维数组添加更多元素,但.push方法不起作用。在屏幕截图中,我打印出所有元素,最后一行是数组。
以下是代码:
def solution(a)
x = 0
y = 1
coordinates = [[0, 0]]
a.each_with_index do |i, index|
next_coordinate = coordinates[coordinates.length-1]
case (index%4)
when 0
next_coordinate[y] += i
when 1
next_coordinate[x] += i
when 2
next_coordinate[y] -= i
else
next_coordinate[x] -= i
end
puts next_coordinate.to_s
coordinates.push(next_coordinate)
end
return coordinates.to_s
end
a = [1, 3, 2, 5, 4, 4, 6, 3, 2]
puts solution(a)
答案 0 :(得分:1)
多次使用相同数组对象的代码。
代码正在执行以下操作:
a = [[1]]
a.push(a[-1])
a
# => [[1], [1]]
a[-1][0] += 1
a
# => [[2], [2]]
简单的解决方法是使用clone
方法复制对象。
next_coordinate = coordinates[coordinates.length-1].clone
答案 1 :(得分:0)
def solution(a)
a.each_with_index.inject([[0, 0]]) do |c, (i,index)|
c.push( c.last.clone.tap do |nc|
xy=1-index%2
sign=(1-2*((index/2)%2)))
nc[xy] += i * sign
end
)
end
end