0

考虑一些功能foo

def foo(input)
  input * 2
end

如何获得某个数组的输入最大值a

a = [3, 5, 7, 9, 6]

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

a.max do |value|
  foo(value)
end

怎么做?

红宝石 1.9.2

4

2 回答 2

7

你需要max_by,不是maxhttp://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-max_by

max

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

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"
于 2012-04-03T04:07:02.947 回答
1

使用数组映射:a.map{|v|foo(v)}.max

于 2012-04-03T04:10:02.973 回答