我想使用min(5,10)或Math.max(4,7)。在Ruby中有这样的函数吗?
min(5,10)
Math.max(4,7)
u4dcyp6a1#
.min
[5, 10].min
.max
[4, 7].max
它们来自Enumerable module,所以任何包含Enumerable的东西都可以使用这些方法。v2.4引入了自己的Array#min和Array#max,它们比Enumerable的方法快得多,因为它们跳过了调用#each。
Enumerable
Array#min
Array#max
#each
.minmax
@nicholasklick提到了另一个选项Enumerable#minmax,但这次返回的是一个[min, max]数组。
Enumerable#minmax
[min, max]
[4, 5, 7, 10].minmax #=> [4, 10]
eimct9ow2#
你可以用
[5,10].min
或
[4,7].max
这是数组的一个方法。
nwnhqdif3#
所有这些结果都在积极尝试处理两个以上参数时生成垃圾。我很想看看他们的表现如何与好ol相比:
def max (a,b) a>b ? a : b end
顺便说一句这也是我对你问题的正式回答
bhmjp9jg4#
如果需要查找哈希的最大值/最小值,可以使用#max_by或#min_by
#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]
ioekq8ef5#
除了提供的答案之外,如果你想将Enumerable#max转换为可以调用变量数字或参数的max方法,就像其他一些编程语言一样,你可以这样写:
def max(*values) values.max end
输出:
max(7, 1234, 9, -78, 156) => 1234
这会滥用splat运算符的属性来创建一个包含所提供的所有参数的数组对象,如果没有提供参数,则创建一个空数组对象。在后一种情况下,该方法将返回nil,因为对空数组对象调用Enumerable#max将返回nil。如果你想在Math模块上定义这个方法,这应该可以做到:
nil
module Math def self.max(*values) values.max end end
请注意,Enumerable.max至少是two times slower compared to the ternary operator ( ?: )。请参阅Dave Morse's answer以获得更简单更快速的方法。
?:
5条答案
按热度按时间u4dcyp6a1#
.min
.max
它们来自Enumerable module,所以任何包含
Enumerable
的东西都可以使用这些方法。v2.4引入了自己的
Array#min
和Array#max
,它们比Enumerable的方法快得多,因为它们跳过了调用#each
。.minmax
@nicholasklick提到了另一个选项
Enumerable#minmax
,但这次返回的是一个[min, max]
数组。eimct9ow2#
你可以用
或
这是数组的一个方法。
nwnhqdif3#
所有这些结果都在积极尝试处理两个以上参数时生成垃圾。我很想看看他们的表现如何与好ol相比:
顺便说一句这也是我对你问题的正式回答
bhmjp9jg4#
如果需要查找哈希的最大值/最小值,可以使用
#max_by
或#min_by
ioekq8ef5#
除了提供的答案之外,如果你想将Enumerable#max转换为可以调用变量数字或参数的max方法,就像其他一些编程语言一样,你可以这样写:
输出:
这会滥用splat运算符的属性来创建一个包含所提供的所有参数的数组对象,如果没有提供参数,则创建一个空数组对象。在后一种情况下,该方法将返回
nil
,因为对空数组对象调用Enumerable#max将返回nil
。如果你想在Math模块上定义这个方法,这应该可以做到:
请注意,Enumerable.max至少是two times slower compared to the ternary operator (
?:
)。请参阅Dave Morse's answer以获得更简单更快速的方法。