Rubyでmin/maxを求めるには?

min(5,10)Math.max(4,7)`のような単純明快なことをしたいと思っています。 このような関数はRubyにありますか?

ソリューション

することができます。

[5, 10].min

または

[4, 7].max

これらはEnumerableモジュールから来ているので、Enumerableを含むものは、これらのメソッドを利用できます。

v2.4では独自のArray#minArray#maxが導入されました。これらは#eachの呼び出しをスキップするので、Enumerable'のメソッドよりもはるかに高速です。

**エディット

@nicholasklick氏は、Enumerable#minmaxという別の選択肢を挙げていますが、今回は [min, max] の配列を返します。

[4, 5, 7, 10].minmax
=> [4, 10]
解説 (13)

を使うことができます。

[5,10].min 

または

[4,7].max

これはArrays用のメソッドです。

解説 (2)

提供された回答に加えて、Enumerable#maxを、他のいくつかのプログラミング言語のように、可変の数や引数を呼び出すことができるmaxメソッドに変換したい場合は、次のように書くことができます。

def max(*values)
 values.max
end

出力します。

max(7, 1234, 9, -78, 156)
=> 1234

これは splat 演算子のプロパティを悪用して、提供されたすべての引数を含む配列オブジェクトを作成します。また、引数が提供されなかった場合は空の配列オブジェクトを作成します。後者の場合、空の配列オブジェクトで Enumerable#max を呼び出すと nil が返されるので、このメソッドは nil を返します。

Math モジュールでこのメソッドを定義する場合は、これで十分です。

module Math
 def self.max(*values)
  values.max
 end
end

Enumerable.max は少なくとも 三項演算子 (?:) に比べて 2 倍遅い ことに注意してください。もっと簡単で速い方法は Dave Morse's answer を参照してください。

解説 (1)