Ruby 配列の最大値と最小値を求める

  • 作成日 2020.12.06
  • 更新日 2022.09.08
  • Ruby
Ruby 配列の最大値と最小値を求める

Rubyで、maxとminを使用して、配列の最大値と最小値を求めるサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

maxとmin使い方

maxとminを使用すれば、配列の最大値と最小値を求めることが可能です。

配列.max
配列.min

以下は、配列の最大値と最小値を求めるサンプルコードとなります。

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

p arr.max
# 10

p arr.min
# 1

arr = [7.7, 2.2, 5.5, 1.1, 10.1]

p arr.max
# 10.1

p arr.min
# 1.1

arr = [-7.7, -2.2, -5.5, -1.1, -10.1]

p arr.max
# -1.1

p arr.min
# -10.1

文字列にも使用することが可能です。

arr = ["e", "c", "a", "d", "b"]

p arr.max
# "e"

p arr.min
# "a"

arr = ["aaa", "aab", "aac"]

p arr.max
# "aac"

p arr.min
# "aaa"

大文字と小文字では、小文字の方が大きいとされます。

arr = ["A", "B", "a", "b"]

p arr.max
# "b"

p arr.min
# "A"

また、異なる型が配列に含まれているとエラーとなります。

arr = [1, "A", "a"]

p arr.max
# in `max': comparison of String with 1 failed (ArgumentError)

arr = [nil, "A", "a"]

p arr.max
# in `max': comparison of String with nil failed (ArgumentError)

文字列と数値であれば一度、ブロックで数値に変換して「<=>」演算子を使用すれば比較することができます。

arr = [2 , "1", 3]

p arr.max {|x,y| x.to_i <=> y.to_i }
# 3

p arr.min {|x,y| x.to_i <=> y.to_i }
# "1"

上記は、条件付きで最大値、最小値を取得できるmax_by,min_byも使用することもできます。
パフォーマンスはmaxの方がいいです。

arr = [2 , "1", 3]

p arr.max_by {|x| x.to_i }
# 3

p arr.min_by {|x| x.to_i }
# 3

【参考】1000万回 max_byとmaxを実行したパフォーマンス結果

                 user     system      total        real
#max_by      5.516000   0.000000   5.516000 (  5.584260)
#max         3.796000   0.000000   3.796000 (  3.811420)

またminmaxを使用すれば、最大値と最小値を同時に比較することが可能です。

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

p arr.minmax
# [1, 10]