特定の属性の最大値を持つRuby配列の要素を見つける


83

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


回答:



29

これは役に立ちますか?

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

(あなたのフィールドには名前があると思いますattr)


はい、それはまさに私が探していたものであり、Array apiを精査していて、何も見つかりませんでした。APIでEnumberableを確認するのを忘れてください。ありがとうございます。
— リチャードストークス

1
EnumerableAPIを常に確認してください。それはあなたが必要とするすべてと台所の流しを持っています!
— Sahil Muthoo 2011年

2
私が使って好みmax_byのブロックは、単一の引数を取り、あなたが明示的に宇宙船(使用する必要はありません:使用する方が簡単であるため<=>)演算子を。
— デビッドグレイソン

@DavidGrayson情報をありがとう。私はこの方法の存在を知りませんでした。私はあなたのコメントと回答に投票します。
— p.matsinopoulos 2011年

3

配列を並べ替えてから、最大値、最小値、2番目に大きい値などを取得することもできます。

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

puts hash[0]["key"]

2
最小値または最大値を求める場合、アルゴリズムはO(n)です。並べ替えは最小限O(n log n)です。不必要なパフォーマンスの低下があるため、必要な場合を除いてこれを使用しないでください。
— ジェイミー

1
本当。並べ替えは、最大値を取得するためだけにやり過ぎです。私は誰かが最大の3など、2番目に大きな取得したい場合には、これを追加
— Linju
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.