在枚举器上调用max方法

时间:2015-09-23 17:40:32

标签: ruby enumeration

在此代码中:

people = [ p1, p2, p3 ]
people.map { |p| p.age }.max
  • 这段代码不是在创建一个数组然后在其上调用max吗?
  • 由于冗余阵列,这不是浪费内存吗? 由map方法创建?
  • 我们不能在任何枚举器和计算机上调用max 飞行中的最大值?

2 个答案:

答案 0 :(得分:6)

是的,map创建一个临时数组。是的,您可以使用其块形式

直接在可枚举上使用max
the_eldest_one = people.max { |p1, p2| p1.age <=> p2.age }
# or
the_eldest_one = people.max_by(&:age)

答案 1 :(得分:1)

塞尔吉奥的答案很棒,但作为另一种方式:

是的,它会创建一个新数组。是的,这是浪费。避免创建中间数组以及重新计算值的方法是手动执行。假设max至少为0(您可以更改):

people.inject(0){|max, e| _max = e.age; _max > max ? _max : max}