我想使用min(5,10)或Math.max(4,7)。Ruby中有这样的函数吗?
当前回答
除了提供的答案之外,如果你想将Enumerable#max转换为一个max方法,可以调用变量数或参数,就像在其他一些编程语言中一样,你可以这样写:
def max(*values)
values.max
end
输出:
max(7, 1234, 9, -78, 156)
=> 1234
这将滥用splat操作符的属性来创建一个包含所提供的所有参数的数组对象,如果没有提供参数,则创建一个空数组对象。在后一种情况下,该方法将返回nil,因为在空数组对象上调用Enumerable#max将返回nil。
如果你想在Math模块上定义这个方法,这应该可以做到:
module Math
def self.max(*values)
values.max
end
end
注意Enumerable。Max至少比三元操作符(?:)慢两倍。请参阅Dave Morse给出的更简单快捷的方法。
其他回答
所有这些结果在热心地试图处理两个以上的实参时都会产生垃圾。我很好奇他们和优秀的人相比表现如何:
def max (a,b)
a>b ? a : b
end
顺便说一句,这是我对你问题的正式回答。
如果需要找到哈希的最大/最小值,可以使用#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
这将滥用splat操作符的属性来创建一个包含所提供的所有参数的数组对象,如果没有提供参数,则创建一个空数组对象。在后一种情况下,该方法将返回nil,因为在空数组对象上调用Enumerable#max将返回nil。
如果你想在Math模块上定义这个方法,这应该可以做到:
module Math
def self.max(*values)
values.max
end
end
注意Enumerable。Max至少比三元操作符(?:)慢两倍。请参阅Dave Morse给出的更简单快捷的方法。
你可以使用
[5,10].min
or
[4,7].max
它是数组的一个方法。
你可以这样做
[5, 10].min
or
[4, 7].max
它们来自Enumerable模块,所以任何包含Enumerable的东西都有这些方法可用。
v2.4引入了自己的array# min和array# max,这比Enumerable的方法快得多,因为它们跳过了调用#each。
@nicholasklick提到了另一个选项,Enumerable#minmax,但这次返回一个[min, max]数组。
[4, 5, 7, 10].minmax
=> [4, 10]
推荐文章
- 我如何在Ruby中解析YAML文件?
- Rails中的OO设计:在哪里放置东西
- 给定一个类,查看实例是否有方法(Ruby)
- 在日历应用程序中建模重复事件的最佳方法是什么?
- 如何创建一个私有类方法?
- 无法安装pg gem
- 双* (splat)操作符做什么
- 如何使用Ruby on Rails进行HTTP请求?
- 如何从rake任务中提前返回?
- 什么&。(&点)在Ruby中是什么意思?
- 是什么阻碍了Ruby和Python获得V8的Javascript速度?
- 运行pod设置给我“坏的解释器:没有这样的文件或目录”错误
- 在Ubuntu上安装sqlite3-ruby错误
- Ruby有什么Python没有的,反之亦然?
- find_spec_for_exe':无法找到gem bundle (>= 0.a) (gem::GemNotFoundException)