假设@houses数组设置如下:

house1.price = 10
house2.price = 20
house3.price = 30
@houses << house1
@houses << house2
@houses << house3

这是我们计算的起点,我们想找出一套房子的平均价格:
total = 0
average = 0
for h in @houses
 total += h.price
end
average = total/@houses.size

这似乎是相当多的打字只是为了得到一个平均值。
有更好的办法吗?

最佳答案

对可枚举集合使用inject方法。inject允许您传入“accumulator”的初始值(在本例中为0),然后对列表中的每个元素应用一些操作,并为要传递到下一个迭代中的accumulator返回一个新值。
然后从inject调用返回累加器的最终值。
所以在这种情况下,我们只是把所有的房价加在累加器里,然后最后除以总数。
您可以使用一些ruby技巧使它变得更有趣,并可能将其压缩得更多,但这是可以理解的,并且只需遍历列表一次就可以将值相加。

@houses.inject(0){|total, house| total + house.price} / @houses.size

08-26 08:15