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')

「Reports」で 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

の主な用途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 に答える