min(5,10)や
Math.max(4,7)`のような単純明快なことをしたいと思っています。 このような関数はRubyにありますか?
することができます。
[5, 10].min
または
[4, 7].max
これらはEnumerableモジュールから来ているので、Enumerable
を含むものは、これらのメソッドを利用できます。
v2.4では独自のArray#min
とArray#max
が導入されました。これらは#each
の呼び出しをスキップするので、Enumerable'のメソッドよりもはるかに高速です。
**エディット
@nicholasklick氏は、Enumerable#minmax
という別の選択肢を挙げていますが、今回は [min, max]
の配列を返します。
[4, 5, 7, 10].minmax
=> [4, 10]
を使うことができます。
[5,10].min
または
[4,7].max
これはArrays用のメソッドです。
提供された回答に加えて、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 を参照してください。