我有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
的{{1}}?如何仅返回具有特定@type
的对象?
答案 0 :(得分: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)
如果您想根据@type
值过滤Tile对象,Array#select
是您的朋友:
filtered_type_array = s.select{|t| t.type == 'some_value'}
以下是Array
的文档:Ruby Array
答案 1 :(得分:0)
你可以覆盖你的Tile类中的to_s
,从中返回类型,只需通过调用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}