你如何简明得到房子的数组的平均房价?(How do you concisely get the av

2019-07-30 15:31发布

假设阵列被设置如下的@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

这似乎是相当多的打字只是为了得到一个平均的。

有没有更好的办法?

Answer 1:

使用inject的可枚举集合方法。 注入可以让你在初始值传递的(在这种情况下,0)的“蓄电池”,然后涂抹一些操作列表中的每个元素,并返回蓄能器传递到下一个迭代的新值。

累加器的最终值,然后从返回的inject通话。

所以在这种情况下,我们只是添加了所有的房价到累加器,然后最后由总数量除以。

你可以得到funkier,可能与一些红宝石的skillz更压缩了下去,但是这是可以理解的合理,并通过列表只迭代一次,加起来的价值。

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


Answer 2:

Madlep的答案将在从过去几年的Ruby的任何版本。 但如果你使用Ruby 1.8.7或更高版本,可以多一点简洁地表达它作为@houses.collect(&:price).inject(:+)/@houses.size

顺便说一句,我曾以为这种技术将变得更慢,因为它必须循环两次,但由于在Ruby中本身的优化,它实际上是更快的达到几百万的项目在我的关于Ruby 1.8.7的测试,和更快的(但不是以尽可能多),即使在过去的Ruby 1.9千万的项目。 去告诉你分析的重要性。



Answer 3:

如果你在一个Rails应用程序的时候,你可以做array.sum / array.size



文章来源: How do you concisely get the average house price from an array of houses?