1

某些方法,Enumerable例如max_bymin_by,或find为迭代的项目评估一些相关值,并返回原始项目之一。我经常想要的不是原始值,而是评估的形式。在这个例子中:

max = some_enumerable_object.max_by{|e| some_function(e)}
some_function(max)

max_by选择一个项目max,但我想要的是价值some_function(max)而不是它max本身。这样做some_function(max)似乎浪费了计算,因为它已经在迭代中进行了评估。有没有办法some_function(max)不用重新计算就可以访问?

4

2 回答 2

2

您可以map致电max

max_value = some_enumerable_object.map { |e| some_function(e) }.max
于 2012-10-11T03:03:55.343 回答
1

您始终可以使用map创建一个包含原始值以及计算值的子数组:

max = some_enumerable_object.map{ |o|
  [o, some_function(o)] 
}.max_by{ |o,e| e }

完成后,您可以获取原始值或max变量中函数的结果。

于 2012-10-11T03:06:42.623 回答