min(5,10)やMath.max(4,7)`のような単純明快なことをしたいと思っています。 このような関数はRubyにありますか?
や
することができます。
[5, 10].min
または
[4, 7].max
これらはEnumerableモジュールから来ているので、Enumerableを含むものは、これらのメソッドを利用できます。
Enumerable
v2.4では独自のArray#minとArray#maxが導入されました。これらは#eachの呼び出しをスキップするので、Enumerable'のメソッドよりもはるかに高速です。
Array#min
Array#max
#each
**エディット
@nicholasklick氏は、Enumerable#minmaxという別の選択肢を挙げていますが、今回は [min, max] の配列を返します。
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 を返します。
nil
Math モジュールでこのメソッドを定義する場合は、これで十分です。
module Math def self.max(*values) values.max end end
Enumerable.max は少なくとも 三項演算子 (?:) に比べて 2 倍遅い ことに注意してください。もっと簡単で速い方法は Dave Morse's answer を参照してください。
?:
することができます。
または
これらはEnumerableモジュールから来ているので、
Enumerable
を含むものは、これらのメソッドを利用できます。v2.4では独自の
Array#min
とArray#max
が導入されました。これらは#each
の呼び出しをスキップするので、Enumerable'のメソッドよりもはるかに高速です。**エディット
@nicholasklick氏は、
Enumerable#minmax
という別の選択肢を挙げていますが、今回は[min, max]
の配列を返します。を使うことができます。
または
これはArrays用のメソッドです。
提供された回答に加えて、Enumerable#maxを、他のいくつかのプログラミング言語のように、可変の数や引数を呼び出すことができるmaxメソッドに変換したい場合は、次のように書くことができます。
出力します。
これは splat 演算子のプロパティを悪用して、提供されたすべての引数を含む配列オブジェクトを作成します。また、引数が提供されなかった場合は空の配列オブジェクトを作成します。後者の場合、空の配列オブジェクトで Enumerable#max を呼び出すと
nil
が返されるので、このメソッドはnil
を返します。Math モジュールでこのメソッドを定義する場合は、これで十分です。
Enumerable.max は少なくとも 三項演算子 (
?:
) に比べて 2 倍遅い ことに注意してください。もっと簡単で速い方法は Dave Morse's answer を参照してください。