4
#!/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,以便从中提取名称和描述?

4

3 回答 3

10

用于find从给定条件的集合中获取对象:

reports.find { |report| report.id == 2 }
#=> => #<OReport:0x007fa32c9e85c8 @desc="Two Desc", @id=2, @name="Two">

如果您希望多个对象满足条件,并且想要所有对象而不是第一个匹配的对象,请使用select.

于 2012-09-16T15:22:11.100 回答
4

如果 for 的主要用途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"

哈希查找通常比数组查找更快,但更重要的是,它更简单。

于 2012-09-16T15:43:37.903 回答
0

您可以通过以下语法获取 2 的报告。

reports[1].name
reports[1].id

它肯定会为你工作。

于 2012-09-16T15:30:49.213 回答