Arrays 在Ruby中创建具有坐标的对象数组?

Arrays 在Ruby中创建具有坐标的对象数组?,arrays,ruby,loops,Arrays,Ruby,Loops,我有一个这样的物体 class Place def initialize(x,y) @x = x @y = y end end 因此,我必须模拟大小为X,Y的动态网格。例如3x5(宽度,高度) 我需要保存数组中的所有“Place”对象,以及所有可能的值,Place(1,1)、Place(1,2)、Place(1,3)。。。位置(3,5) 我试过这种方法(在网格内) 但它不起作用。我该怎么做?改变 @places = Array.new(width * height)

我有一个这样的物体

class Place
  def initialize(x,y)
    @x = x
    @y = y
  end
end
因此,我必须模拟大小为X,Y的动态
网格
。例如3x5(
宽度
高度

我需要保存数组中的所有“Place”对象,以及所有可能的值,Place(1,1)、Place(1,2)、Place(1,3)。。。位置(3,5)

我试过这种方法(在
网格内

但它不起作用。我该怎么做?

改变

@places = Array.new(width * height)

Array#push
在数组的末尾创建一个新元素,因为您已经创建了一个包含一定数量元素的数组,然后将更多元素推入其中-您可能首先观察到
宽度*高度
元素为
的变化

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

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

@places = (0...width).to_a.product((0...height).to_a).map do |x, y|
  Place.new(x,y)
end
感谢@tadman,将有三点范围来排除范围中的紧边界(
[0,宽度)
)。这使得元素数量完全相等
宽度
高度


感谢@tadman,将有三个点的范围来排除范围中的紧边界(
[0,宽度)
)。这使得元素的数量完全相等
宽度
高度

一个Ruby约定是用于变量和方法的名称。您不必遵守,但99%以上的Rubiest遵守。您可能指的是
0…宽度
,其中相当于
0..width-1
。宽度10表示y中的11个条目我们的数组与您的代码不符,这是错误的。Ruby的一个约定是用于变量和方法的名称。您不必遵守,但99%以上的Rubiest遵守。您可能指的是
0…width
,这相当于
0..width-1
。width 10表示数组中有11个条目与您的代码不符。
vs
vs
这里也是。