ruby-on-rails - 对哈希数组中的值求和的更好方法

标签 ruby-on-rails ruby

<分区>

我需要对数组哈希中的值求和,我找到了一种方法来做到这一点 here

但在 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"]}

总计行不是很易读。如果这样的事情能奏效就好了;

total_sales = sales.sum("sale_price")

这只是一厢情愿还是我忽略了更好的解决方案?

最佳答案

我喜欢像这样使用 map/reduce 比喻:

total_sales = sales.map {|s| s['sale_price']}.reduce(0, :+)

reduce 方法是 inject 方法的同义词,我发现名称 inject 与 memo 组件有些混淆。它有另一种形式,我在上面使用它来获取初始值和对用于组合/缩减过程的方法调用的引用。

我认为映射值然后将它们缩减为聚合的总体模式是众所周知的并且可以 self 记录。

编辑:使用符号 :+ 而不是 proc 引用 &:+

关于ruby-on-rails - 对哈希数组中的值求和的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14654720/

相关文章:

ruby-on-rails - 如何避免reactjs中的key/id问题并使 Prop 从父级传递到子级?

ruby-on-rails - Omniauth 错误 -- PG::Error: ERROR: 重复键值违规

javascript - Rails 5,Cocoon Gem - 嵌套形式中的嵌套形式

html - 在 Watir Ruby 中访问顺序相同的元素

ruby-on-rails - 从 ActiveRecord 对象中提取两个属性的快捷方式?

ruby - tar 格式替代方案

ruby-on-rails - Rails 运行时配置

ruby - GMX && ruby 邮件 SMTP : "end of file reached"

ruby - 为什么我所有的看跌期权都返回=>nil?

sql - Postgresql:根据表列中的最大匹配数对结果进行排序