【发布时间】:2014-02-18 21:57:16
【问题描述】:
我有一个 array 的 hash 值:
> taxes = [{:name=>"foo", :rate=>0.5}, {:name=>"bar", :rate=>2.5}]
=> [{:name=>"foo", :rate=>0.5}, {:name=>"bar", :rate=>2.5}]
这可以总结费率:
> taxes.reduce(0) {|sum,element|sum + element[:rate]}
=> 3.0
还有其他更容易理解和简洁的方法吗?
** 编辑 **
为了比较(是的,我意识到这只是一个数组):
>> [1,2,3].reduce(:+)
=> 6
【问题讨论】:
-
你所拥有的有什么问题?你想要更短的吗?
-
你喜欢
taxes.collect { |h| h[:rate] }.reduce(0,:+) # => 3.0吗? -
文本难以理解和读者只是不熟悉某些东西是有区别的。函数式表示法不仅非常简洁,而且一旦读者熟悉了函数式概念,就可以成为最容易理解的表示法。
-
@ArupRakshit:
inject对我来说似乎更糟。 -
@craig 在 Rails 中,你可以像这样使用 Enumerable#sum:
taxes.sum{|item| item[:rate]}