2011-11-07 19 views
56

おそらく、この質問には非常に簡単な答えがありますが、私の人生は現時点では理解できません。特定のタイプのオブジェクトのルビ配列があり、それらがすべて特定のフィールドを持っている場合、そのフィールドの最大値を持つ配列の要素を見つけるにはどうすればよいですか?特定の属性の最大値を持つRuby配列の要素を見つける

+0

[Moreブロックのない最大/最小の簡潔なバージョン](http://stackoverflow.com/questions/7087717/more-concise-version-of-max-min-without-the-block) –

答えて

112
array.max_by do |element| 
    element.field 
end 

か(私はあなたのフィールドに名前attrを持っていると仮定します) 。

array = array.sort_by {|k,v| v}.reverse 

puts hash[0]["key"] 
+0

Enumerableモジュールのドキュメントを参照して、より便利なメソッドを確認してください。 –

24

これは役に立ちますか?

array.max_by(&:field) 
+0

はい、まさに私が探していたものですのために、配列のAPIを精練していた何かを見つけることができませんでした、EnumberableのAPIをチェックすることを忘れて、ありがとう! –

+1

常にEnumerable APIをチェックしてください。それはあなたが必要とするすべてを持っています*と*キッチンシンク! –

+2

私は 'max_by'を使うのが好きです。なぜなら、ブロックは単一の引数しか取らず、宇宙船(' <=> ')演算子を明示的に使う必要がないからです。 –

0

あなたはまた、配列をソートして、MAX、MIN、二番目に大きい値などを取得できます。

my_array.max {|a,b| a.attr <=> b.attr } 

+1

最小値または最大値の場合は、アルゴリズムは 'O(n)'です。ソートは最小では 'O(n log n)'です。不必要なパフォーマンスの低下があるので、必要な場合以外はこれを使用しないでください。 – Jamie

関連する問題