Ste*_*eO7 16 ruby ruby-on-rails
我需要在数组哈希中对值进行求和,我找到了一种在这里做的方法
但看起来Ruby似乎应该有更优雅的方式.
这是有效的;
sales = [{"sale_price"=>210000, "deed_type"=>"Warranty Deed"}, {"sale_price"=>268300, "deed_type"=>"Warranty Deed Joint"}]
total_sales = sales.inject(0) {|sum, hash| sum + hash["sale_price"]}
Run Code Online (Sandbox Code Playgroud)
总计行不是很可读.如果像这样的东西工作会很好;
total_sales = sales.sum("sale_price")
Run Code Online (Sandbox Code Playgroud)
这只是一厢情愿的想法还是我忽视了一个更好的解决方案?
Win*_*eld 33
我喜欢使用map/reduce隐喻,如下所示:
total_sales = sales.map {|s| s['sale_price']}.reduce(0, :+)
Run Code Online (Sandbox Code Playgroud)
reduce方法是inject方法的同义词,我发现注入名称与memo组件有些混淆.它有我上面使用的另一种形式来获取初始值和对用于组合/缩小过程的方法调用的引用.
我认为映射值然后将它们缩减为聚合的整体模式是众所周知的并且是自我记录的.
编辑:使用符号:+而不是proc参考&:+
归档时间: |
|
查看次数: |
20797 次 |
最近记录: |