Ruby 3.0.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Enumerableモジュール > min

instance method Enumerable#min

min -> object | nil[permalink][rdoc]
min(n) -> Array

最小の要素、もしくは最小の n 要素が昇順で入った配列を返します。全要素が互いに <=> メソッドで比較できることを仮定しています。

引数を指定しない形式では要素が存在しなければ nil を返します。引数を指定する形式では、空の配列を返します。該当する要素が複数存在する場合、どの要素を返すかは不定です。

[PARAM] n:
取得する要素数。


a = %w(albatross dog horse)
a.min                                # => "albatross"
a.min(2)                             # => ["albatross", "dog"]
min {|a, b| ... } -> object | nil[permalink][rdoc]
min(n) {|a, b| ... } -> Array

ブロックの評価結果で各要素の大小判定を行い、最小の要素、もしくは最小の n 要素が昇順で入った配列を返します。引数を指定しない形式では要素が存在しなければ nil を返します。引数を指定する形式では、空の配列を返します。

ブロックの値は、a > b のとき正、a == b のとき 0、 a < b のとき負の整数を、期待しています。

該当する要素が複数存在する場合、どの要素を返すかは不定です。

[PARAM] n:
取得する要素数。


class Person
  attr_reader :name, :age

  def initialize(name, age)
    @name = name
    @age = age
  end
end

people = [
  Person.new("sato", 55),
  Person.new("sato", 33),
  Person.new("sato", 11),
  Person.new("suzuki", 55),
  Person.new("suzuki", 33),
  Person.new("suzuki", 11),
  Person.new("tanaka", 55),
  Person.new("tanaka", 33),
  Person.new("tanaka", 11)
]

# 年齢が最小、名前が最大
people.min { |x, y| (x.age <=> y.age).nonzero? || y.name <=> x.name }
# => #<Person:0x007fd6f0824190 @name="tanaka", @age=11>

people.min(2) { |x, y| (x.age <=> y.age).nonzero? || y.name <=> x.name }
# => [#<Person:0x007fb5899ef4a8 @name="tanaka", @age=11>, #<Person:0x007fb5899ef728 @name="suzuki", @age=11>]
[EXCEPTION] TypeError:
ブロックが整数以外を返したときに発生します。