【问题标题】:create an array of objects with coordinates in Ruby?在 Ruby 中创建具有坐标的对象数组?
【发布时间】:2017-09-16 18:48:48
【问题描述】:

我有一个这样的对象

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

但是不工作。我该怎么做?

【问题讨论】:

  • 一个 Ruby 约定是使用snake-case 作为变量和方法的名称。您不必遵从,但 99% 以上的 Rubiests 都这样做。
  • 您的意思可能是0...width,相当于0..width-1。宽度 10 意味着您的代码中有 11 个条目,这是错误的。

标签: arrays ruby loops


【解决方案1】:
@places = (0...width).to_a.product((0...height).to_a).map do |x, y|
  Place.new(x,y)
end

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

【讨论】:

  • .. vs ... 这里也是。
【解决方案2】:

改变

@places = Array.new(width * height)

@places = Array.new

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

【讨论】:

    猜你喜欢
    • 2012-07-10
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 2016-04-10
    相关资源
    最近更新 更多