考虑一些函数foo
:
def foo(input)
input * 2
end
如何获取某个数组a
的输入的最大值?
a = [3, 5, 7, 9, 6]
以下内容(不起作用)应返回9:
a.max do |value|
foo(value)
end
怎么做?
Ruby 1.9.2
答案 0 :(得分:6)
您需要max_by
,而不是max
。 http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-max_by
max
:
返回枚举中具有最大值的对象。第一种形式 假设所有对象都实现了Comparable;第二个使用块来 返回< =>湾
a = %w(albatross dog horse)
a.max #=> "horse"
a.max {|a,b| a.length <=> b.length } #=> "albatross"
所以max
确实占了一块,但它并没有达到预期目的。
max_by
:
返回枚举中的对象,该对象给出给定的最大值 块。
如果没有给出阻止,则返回枚举器。
a = %w(albatross dog horse)
a.max_by {|x| x.length } #=> "albatross"
答案 1 :(得分:1)
使用数组映射:a.map{|v|foo(v)}.max