5

Enumerable#max_byレシーバーに複数の max/min 要素がある場合は、関連する要素の 1 つ (おそらく最初の要素)返しEnumerable#min_byます。たとえば、次のようになります。

[1, 2, 3, 5].max_by{|e| e % 3}

2のみ(または のみ) を返します5

代わりに、すべての最大/最小要素を配列で返したいと思います。上記の例では、[2, 5](または[5, 2]) になります。これを取得する最良の方法は何ですか?

4

3 に答える 3

10
arr = [1, 2, 3, 5]

arr.group_by{|a| a % 3} # => {1=>[1], 2=>[2, 5], 0=>[3]}
arr.group_by{|a| a % 3}.max.last # => [2, 5]
于 2014-03-01T15:28:57.400 に答える