Array.push不适用于二维数组

时间:2013-12-12 17:54:02

标签: ruby arrays push

我正在尝试向ruby中的二维数组添加更多元素,但.push方法不起作用。在屏幕截图中,我打印出所有元素,最后一行是数组。

enter image description here

以下是代码:

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)

2 个答案:

答案 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