Ruby、数组、对象-选择对象

Ruby、数组、对象-选择对象,ruby,arrays,search,object,Ruby,Arrays,Search,Object,现在如何搜索报表2,以便从中提取名称和描述?用于在给定条件下从集合中获取对象: #!/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 <&

现在如何搜索报表2,以便从中提取名称和描述?

用于在给定条件下从集合中获取对象:

#!/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.find { |report| report.id == 2 }
#=> => #<OReport:0x007fa32c9e85c8 @desc="Two Desc", @id=2, @name="Two">

这肯定会对你有用。

< P>如果报表的主要用途是用ID检索,那么考虑用散列代替:

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

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

report=reports.select{r|e.name==1}.name您缺少一个attr_访问器进行描述,.oops,是的,我的select会引发一个可怕的错误:-抱歉,如果它们以不同的顺序添加到数组中呢?从未想过使用报告[x]设置。简单易用。在这种情况下,当您需要引用id时,最好从OReport实例中删除@id并使用reports.keyreport,还是最好将其保留在您的答案中?@sawa,如果OReport实例出于某种目的需要知道其id,那么它必须保留它。我喜欢,但是Wayne的答案更简单,而且一切都是基于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"