如何在Ruby中获得任意函数的最大值?

B S*_*ven 0 ruby ruby-on-rails enumerator ruby-on-rails-3 ruby-1.9.2

考虑一些功能foo:

def foo(input)
  input * 2
end
Run Code Online (Sandbox Code Playgroud)

如何获取某些数组的输入的最大值a

a = [3, 5, 7, 9, 6]
Run Code Online (Sandbox Code Playgroud)

类似下面的内容(不起作用)应该返回9:

a.max do |value|
  foo(value)
end
Run Code Online (Sandbox Code Playgroud)

怎么做?

Ruby 1.9.2

And*_*imm 6

你需要max_by,没有max.http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-max_by

max:

返回枚举中具有最大值的对象.第一种形式假设所有对象都实现了Comparable; 第二个使用块返回<=> b.

a = %w(albatross dog horse)
a.max                                  #=> "horse"
a.max {|a,b| a.length <=> b.length }   #=> "albatross"
Run Code Online (Sandbox Code Playgroud)

这样max做会占用一块,但它并没有达到您的预期.

max_by:

返回枚举中的对象,该对象提供给定块的最大值.

如果没有给出块,则返回枚举器.

a = %w(albatross dog horse)
a.max_by {|x| x.length }   #=> "albatross"
Run Code Online (Sandbox Code Playgroud)