452

min(5,10)、またはを使用したいMath.max(4,7)。Ruby でこの効果を発揮する関数はありますか?

4

6 に答える 6

787

できるよ

[5, 10].min

また

[4, 7].max

それらはEnumerable モジュールから来ているので、インクルードするものはすべてEnumerableそれらのメソッドを利用できます。

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

@nicholasklick は別のオプション について言及していますEnumerable#minmaxが、今回は の配列を返し[min, max]ます。

[4, 5, 7, 10].minmax
=> [4, 10]
于 2009-08-31T20:56:28.847 に答える
57

使用できます

[5,10].min 

また

[4,7].max

配列用のメソッドです。

于 2009-08-31T20:57:02.123 に答える
31

これらの結果はすべて、3 つ以上の引数を処理しようとする熱心な試みでガベージを生成します。私は彼らが善良な人と比較してどのように機能するかを知りたいと思います:

def max (a,b)
  a>b ? a : b
end

ちなみに、これはあなたの質問に対する私の公式の回答です。

于 2016-01-10T19:11:24.380 に答える
27

ハッシュの最大/最小を見つける必要がある場合は、#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]
于 2015-07-24T19:54:58.933 に答える
21

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

def max(*values)
 values.max
end

出力:

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

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

このメソッドを Math モジュールで定義したい場合は、次のようにすればうまくいきます。

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

Enumerable.max は、三項演算子 ( ?:)と比較して少なくとも 2 倍遅いことに注意してください。よりシンプルで高速な方法については、Dave Morse の回答を参照してください。

于 2014-09-20T08:35:19.650 に答える
-3
def find_largest_num(nums)
  nums.sort[-1]
end
于 2020-03-12T07:02:49.183 に答える