#!/usr/local/bin/ruby
class OReport
attr_accessor :id, :name
def initialize(id, name, desc)
@id = id
@name = name
@desc = desc
end
end
reports = Array.new
reports << OReport.new(1, 'One', 'One Desc')
reports << OReport.new(2, 'Two', 'Two Desc')
reports << OReport.new(3, 'Three', 'Three Desc')
我现在如何搜索2的“Reports”,以便从中提取名称和描述?
答案 0 :(得分:10)
使用find
从给定条件的集合中获取对象:
reports.find { |report| report.id == 2 }
#=> => #<OReport:0x007fa32c9e85c8 @desc="Two Desc", @id=2, @name="Two">
如果您希望多个对象符合条件,并且想要所有对象而不是第一个匹配的对象,请使用select
。
答案 1 :(得分:4)
如果reports
的主要用途是按ID检索,请考虑使用哈希:
reports = {}
reports[1] = OReport.new(1, 'One', 'One Desc')
reports[2] = OReport.new(2, 'Two', 'Two Desc')
reports[3] = OReport.new(3, 'Three', 'Three Desc')
p reports[2].name # => "Two"
散列查找通常比数组查找更快,但更重要的是,它更简单。
答案 2 :(得分:0)
您可以通过以下语法获取2的报告。
reports[1].name
reports[1].id
它肯定会对你有用。