回答:
できるよ
[5, 10].min
または
[4, 7].max
これらはEnumerableモジュールからのものであるため、インクルードEnumerable
するものはすべてそれらのメソッドを使用できます。
v2.4は独自のArray#min
andを導入してArray#max
います#each
。これらは、呼び出しをスキップするため、Enumerableのメソッドよりもはるかに高速です。
@nicholasklickは別のオプションについて言及していますEnumerable#minmax
が、今回はの配列を返し[min, max]
ます。
[4, 5, 7, 10].minmax
=> [4, 10]
std::max(4, 7)
はより多くの「句読点」を持っていることに気づき[4, 7].max
ますか?
std::max
名前空間にインポートできるので、名前空間になるだけだとわかりますmax(4, 7)
。待つ; 上を見れば、私はすでにそれを言ったのを見る。
使用できます
[5,10].min
または
[4,7].max
これは配列のメソッドです。
これらの結果はすべて、3つ以上の引数を処理しようとする熱心な試みでゴミを生成します。私はそれらが良い 'olと比較してどのように機能するかを知りたいと思います:
def max (a,b)
a>b ? a : b
end
ちなみに、これはあなたの質問に対する私の公式回答です。
[a,b].max
にはいくつかの問題がありますが、上記の実装よりも高速かどうかはまだ明確ではありません。 blog.bigbinary.com/2016/11/17/...
ハッシュの最大/最小を見つける必要がある場合は、#max_by
または#min_by
people = {'joe' => 21, 'bill' => 35, 'sally' => 24}
people.min_by { |name, age| age } #=> ["joe", 21]
people.max_by { |name, age| age } #=> ["bill", 35]
提供された回答に加えて、Enumerable#maxを、他のいくつかのプログラミング言語のように、変数番号または引数を呼び出すことができるmaxメソッドに変換する場合は、次のように記述できます。
def max(*values)
values.max
end
出力:
max(7, 1234, 9, -78, 156)
=> 1234
これは、スプラット演算子のプロパティを悪用して、提供されたすべての引数を含む配列オブジェクトを作成するか、引数が提供されなかった場合は空の配列オブジェクトを作成します。後者の場合、空の配列オブジェクトでEnumerable#maxをnil
呼び出すとが返されるため、メソッドはを返します。nil
このメソッドをMathモジュールで定義したい場合は、これでうまくいくはずです。
module Math
def self.max(*values)
values.max
end
end
Enumerable.maxは、3項演算子(?:
)と比較して、少なくとも2倍遅いことに注意してください。よりシンプルで高速な方法については、Dave Morseの回答を参照してください。
def find_largest_num(nums)
nums.sort[-1]
end