Ruby 条件を指定して、配列の最大値と最小値を求める
Rubyで、max_byとmin_byを使用して、条件を指定して、配列の最大値と最小値を求めるサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。
環境
- OS windows10 pro 64bit
- ruby 2.7.2p137
max_byとmin_by使い方
maxとminを使用すれば、条件を指定して、配列の最大値と最小値を求めることが可能です。
配列.max_by{|x| 条件}
配列.min{|x| 条件}
以下は、条件を指定して、条件を絶対に指定して、配列の最大値と最小値を求めるサンプルコードとなります。
arr = [-7, 5, 6 , 1, -2]
p arr.max_by {|x| x.abs }
# -7
p arr.min_by {|x| x.abs }
# 1
割り算の余りなどにも利用できます。結果は、一番最初に見つかったものが返されます。
arr = [1, 2, 3, 4, 5 ,6]
p arr.max_by {|x| x % 3 }
# 2
p arr.min_by {|x| x % 3 }
# 3
上記はmax,minを使用して以下のように書くこともでき、こちらの方がパフォーマンスは良さそうです。
arr = [1, 2, 3, 4, 5 ,6]
p arr.max {|x,y| x % 3 <=> y % 3}
# 2
p arr.min {|x,y| x % 3 <=> y % 3 }
# 3
【参考】 同じコードを1000万回実行した結果
user system total real
#max_by 6.579000 0.000000 6.579000 ( 6.646934)
#max 5.031000 0.000000 5.031000 ( 5.040569)
また、minmax_byを使用して最大値と最小値を同時に求めることも可能です。
arr = [1, 2, 3, 4, 5 ,6]
p arr.minmax_by {|x| x % 3 }
# [3, 2]
また、異なる型が配列に含まれているとエラーとなります。
arr = [1, 2, "3", 4, 5 ,6]
p arr.max_by {|x| x % 3 }
# in `each': comparison of String with 1 failed (ArgumentError)
なので、一度、数値に変換する必要があります。
arr = [1, 2, "3", 4, 5 ,6]
p arr.max_by {|x| x.to_i % 3 }
# 2
-
前の記事
javascript lodashを使って配列からランダムに個数を指定して値を抽出する 2021.09.24
-
次の記事
php 連想配列から変数を生成する 2021.09.24
コメントを書く