Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Ruby辞典

  1. トップページ
  2. Ruby辞典
  3. Enumerable.min_by / max_by / minmax / minmax_by

Enumerable.min_by / max_by / minmax / minmax_by

コレクションから最小値・最大値を持つ要素を取得するメソッドです。ブロックで評価基準を指定できます。

構文
# ブロックの戻り値が最小の要素を返します。
コレクション.min_by { |要素| 評価式 }

# ブロックの戻り値が最大の要素を返します。
コレクション.max_by { |要素| 評価式 }

# 最小値と最大値の要素を [min, max] の配列で返します。
コレクション.minmax_by { |要素| 評価式 }

# 自然順序での最小・最大を直接取得します。
コレクション.min
コレクション.max
コレクション.minmax
メソッド一覧
メソッド概要
min_byブロックの戻り値が最小になる要素を返します。
max_byブロックの戻り値が最大になる要素を返します。
minmax_by最小と最大の要素を『[min, max]』の配列で返します。
minコレクションの最小値を返します。ブロックで比較方法を指定することもできます。
maxコレクションの最大値を返します。ブロックで比較方法を指定することもできます。
minmax最小値と最大値を『[min, max]』の配列で返します。
サンプルコード
# 数値配列の最小・最大を取得します。
数値 = [3, 1, 4, 1, 5, 9, 2, 6]
puts 数値.min     # 1
puts 数値.max     # 9
puts 数値.minmax.inspect  # [1, 9]

# ハッシュの配列から特定のキーで最小・最大を取得します。
商品 = [
  { name: "りんご", price: 150 },
  { name: "バナナ", price: 80 },
  { name: "ぶどう", price: 500 },
  { name: "みかん", price: 100 }
]

最安値商品 = 商品.min_by { |p| p[:price] }
puts 最安値商品[:name]   # バナナ

最高値商品 = 商品.max_by { |p| p[:price] }
puts 最高値商品[:name]   # ぶどう

最安値と最高値 = 商品.minmax_by { |p| p[:price] }
puts 最安値と最高値.map { |p| p[:name] }.inspect  # ["バナナ", "ぶどう"]

# 文字列を長さで比較します。
単語 = ["cat", "elephant", "ox", "hippopotamus"]
puts 単語.min_by { |w| w.length }  # ox
puts 単語.max_by { |w| w.length }  # hippopotamus
概要

『min_by』と『max_by』はEnumerableモジュールのメソッドで、ブロックで返した値をもとに最小・最大の要素を取得します。ハッシュの配列から特定のキーで並べ替えて取得する際によく使われます。

ブロックなしの『min』・『max』は要素の自然順序(数値は数値順、文字列はアルファベット順)で比較します。空のコレクションに対して呼び出すと『nil』を返すため、戻り値を使う前に確認が必要です。複数の最小・最大を取得したい場合は『min(n)』・『max(n)』のように引数を指定すると上位n件を配列で取得できます。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。