在枚举器上调用 max 方法

Calling max method on an enumerator

在此代码中:

people = [ p1, p2, p3 ]
people.map { |p| p.age }.max

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

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

Sergio 的回答很好,但作为替代方法:

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

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