Rubyメモ

max_by

maxは配列の最大値を返す。maxの引数で数値を指定して上位複数を返すこともできる。
a=[3,1,4,1,5,9]
a.max
=> 9
a.max(3)
=> [9, 5, 4]


maxはブロックで比較方法を指定できる。ブロックは、-1,0,1を返す必要がある。
a=%w(lemon apple pineapple orange)
=> ["lemon", "apple", "pineapple", "orange"]

a.max{|i,j|i.size <=> j.size}
=> "pineapple"
 a.max(2){|i,j|i.size <=> j.size}
=> ["pineapple", "orange"]


may_byは <=> で比較できる数値を返せばよい。
a.max_by{|i| i.size}
=> "pineapple"
a.max_by(2){|i| i.size}
=> ["pineapple", "orange"]

例えば、配列の特定の値が最大の要素を取り出すようなことが容易にできる。

> a=[["md", 1988], ["sfc", 1990], ["fc", 1986], ["pce",1988]]
a.max_by{|w|w.last}
=> ["sfc", 1990]

sort, sort_by も同様