0

我有一个带有实例变量s的s 数组:Tile@type

class Tile
  Types = ["l", "w", "r"]
  def initialize(type)
    @type = type
  end
end
s = []
20.times { s << Tile.new(Tile::Types.sample)}

我如何得到每个Tile@type如何只返回具有特定对象的对象@type

4

2 回答 2

3

如果你想得到一个包含每个类型属性的数组,你首先需要创建至少一个阅读器@type

class Tile
  attr_reader :type
  Types = ["l", "w", "r"]
  def initialize(type)
    @type = type

  end
end

然后使用Array#map

type_attribute_array = s.map(&:type)
#or, in longer form
type_attribute_array = s.map{|t| t.type)

如果您想根据 Tile 对象的@type值过滤它们,Array#select是您的朋友:

filtered_type_array = s.select{|t| t.type == 'some_value'}

这是文档ArrayRuby Array

于 2012-10-05T17:08:49.890 回答
0

您可以to_s在您的 Tile 类中覆盖,从中返回类型,然后通过调用迭代您的数组s以打印类型<tile_object>.to_s

class Tile
  Types = ["l", "w", "r"]
  def initialize(type)
     @type = type
  end

  def to_s
     @type
  end
end

s = []
20.times { s << Tile.new(Tile::Types.sample)}
s.each {|tile| puts tile.to_s}
于 2012-10-05T17:13:11.443 回答