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

时间:2012-04-03 04:04:07

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-1.9.2 enumerator

考虑一些函数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

2 个答案:

答案 0 :(得分:6)

您需要max_by,而不是maxhttp://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