首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从一组房屋中简明地获得平均房价?

如何从一组房屋中简明地获得平均房价?
EN

Stack Overflow用户
提问于 2009-07-23 01:19:03
回答 3查看 603关注 0票数 4

假设@house数组设置如下:

代码语言:javascript
复制
house1.price = 10
house2.price = 20
house3.price = 30
@houses << house1
@houses << house2
@houses << house3

这是我们计算的起点,我们想要找出一套房子的平均价格:

代码语言:javascript
复制
total = 0
average = 0
for h in @houses
 total += h.price
end
average = total/@houses.size

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

有没有更好的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-23 01:31:45

在可枚举集合上使用inject方法。Inject允许您传递“累加器”的初始值(在本例中为0),然后对列表中的每个元素应用一些操作,并为要传递到下一次迭代的累加器返回一个新值。

然后从inject调用返回累加器的最终值。

因此,在这种情况下,我们只需将所有房价相加到累加器中,最后除以总数。

你可以变得更时髦,也许用一些Ruby技巧把它压缩得更短,但这是可以理解的,只需要迭代一次列表就可以将值相加。

代码语言:javascript
复制
@houses.inject(0){|total, house| total + house.price} / @houses.size
票数 14
EN

Stack Overflow用户

发布于 2009-07-23 01:31:55

Madlep的回答适用于过去几年的任何版本的Ruby。但如果您使用的是Ruby1.8.7或更高版本,则可以更简洁地将其表示为@houses.collect(&:price).inject(:+)/@houses.size

顺便说一句,我认为这种技术会更慢,因为它必须循环两次,但由于Ruby本身的优化,实际上在Ruby 1.8.7上的测试中,它的速度要快得多,在Ruby 1.8.7上的测试中,它可以快到几百万个项目,在Ruby 1.9上,甚至超过1000万个项目,它的速度也要快(但不是那么多)。向您展示了分析的重要性。

票数 11
EN

Stack Overflow用户

发布于 2009-08-16 05:52:58

如果您使用的是Rails应用程序,则可以执行array.sum/array.size

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1169099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档