Ruby Tips!

RubyのTipsを紹介します

配列の中から最大値・最小値を求める

配列の中から最大値・最小値を求めるにはArray#maxArray#minを使う。

p [1, 2, 3, 4, 5].max #=> 5
p [1, 2, 3, 4, 5].min #=> 1

デフォルトでは最大値・最小値を求めるための比較は<=>で行われる。ブロックを渡すと比較の処理を置き換えることができる。例えば文字列を数値化して比較するには以下のように書ける。

p ["1", "2", "3", "4", "5"].max{|a, b| a.to_i <=> b.to_i } #=> "5"
p ["1", "2", "3", "4", "5"].min{|a, b| a.to_i <=> b.to_i } #=> "1"

上記ではArray#maxArray#minを使ったが、比較の前にオブジェクトを事前に変換するのであれば、Array#max_byArray#min_byを使って、同様の処理が以下のように書ける。

p ["1", "2", "3", "4", "5"].max_by{|o| o.to_i } #=> "5"
p ["1", "2", "3", "4", "5"].min_by{|o| o.to_i } #=> "1"