我有一个像这样的对象
class Place
def initialize(x,y)
@x = x
@y = y
end
end
所以,我必须模拟一个大小为X,Y的动态grid
。例如3x5(width
,height
)。
我需要保存数组中的所有“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
但是没有用。我该怎么办?
答案 0 :(得分:2)
@places = (0...width).to_a.product((0...height).to_a).map do |x, y|
Place.new(x,y)
end
感谢@tadman,要有三点范围以排除范围([0, width)
)的紧密边界。这使得元素数量完全等于width
和height
。
答案 1 :(得分:1)
更改
@places = Array.new(width * height)
到
@places = Array.new
Array#push
在数组的末尾创建一个新元素,因为您已经创建了一个包含一定数量元素的数组,然后将更多元素推入其中 - 您可能正在观察第一个width * height
元素是nil