在Ruby中创建一个带坐标的对象数组?

时间:2017-09-16 18:48:49

标签: arrays ruby loops

我有一个像这样的对象

class Place
  def initialize(x,y)
    @x = x
    @y = y
  end
end

所以,我必须模拟一个大小为X,Y的动态grid。例如3x5(widthheight)。

我需要保存数组中的所有“Place”对象,包含所有可能的值,Place(1,1),Place(1,2),Place(1,3)... Place(3, 5)。

我试过这种方式(在Grid内)

def createPlaces width, height
    @places = Array.new(width * height)

    (0..width).to_a.each do |x|
      (0..height).to_a.each do |y|
        @places.push(Place.new(x,y))
      end
    end
  end

但是没有用。我该怎么办?

2 个答案:

答案 0 :(得分:2)

@places = (0...width).to_a.product((0...height).to_a).map do |x, y|
  Place.new(x,y)
end

感谢@tadman,要有三点范围以排除范围([0, width))的紧密边界。这使得元素数量完全等于widthheight

答案 1 :(得分:1)

更改

@places = Array.new(width * height)

@places = Array.new

Array#push在数组的末尾创建一个新元素,因为您已经创建了一个包含一定数量元素的数组,然后将更多元素推入其中 - 您可能正在观察第一个width * height元素是nil