452

我想使用min(5,10), 或Math.max(4,7). Ruby 中是否有实现这种效果的函数?

4

6 回答 6

787

你可以做

[5, 10].min

或者

[4, 7].max

它们来自Enumerable 模块,因此包含的任何内容Enumerable都将具有这些方法。

v2.4 引入了自己的Array#minand 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

所有这些结果都在热心地尝试处理两个以上的参数时产生垃圾。我很想知道他们与优秀的 ol 相比表现如何:

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 运算符的属性来创建一个包含所有提供的参数的数组对象,如果没有提供参数,则创建一个空数组对象。在后一种情况下,该方法将返回,因为在空数组对象上nil调用Enumerable#maxnil会返回。

如果你想在 Math 模块上定义这个方法,这应该可以解决问题:

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

请注意,与三元运算符 ( )相比,Enumerable.max 至少慢了两倍?:。请参阅Dave Morse 的答案,了解更简单、更快捷的方法。

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