平均值嵌入在ruby哈希中

use*_*480 2 ruby arrays hash ruby-on-rails

我有一个嵌入式哈希,我需要计算平均值.我已经成功地对它们进行了分组(来自未分组),但找到平均值并不适合我

这是示例哈希数据

myhash = {"2011-02-15"=>[["2011-02-15", 10], ["2011-02-15", 60]], 
          "2011-02-22"=>[["2011-02-22", 22]], 
          "2011-02-28"=>[["2011-02-28", 110],["2011-02-28", 70]]}
Run Code Online (Sandbox Code Playgroud)

这是我如何对它们进行分组(它们曾经只是{k => v}未分组)

@r = @myhash.group_by(&:first)
Run Code Online (Sandbox Code Playgroud)

我尝试了这个线程中的两个解决方案(Ruby中最好的方法是在数组中平均设置?)但是都没有用.

好问题.我希望结果按日期平均,所以我可以用这种方式提供它们.

[{"2012-02-15" => 35"}, {"2012-02-22" => 22"}, {"2012-02-28" => 90"}]
Run Code Online (Sandbox Code Playgroud)

And*_*all 6

Hash[myhash.map { |k,v| [k, v.map(&:last).inject(:+) / v.size] }]
#=> {"2011-02-15"=>35, "2011-02-22"=>22, "2011-02-28"=>90}
Run Code Online (Sandbox Code Playgroud)

  • @ismaelga`injection`可以为每个值之间的"注入"方法取一个符号,在`memo`上用当前元素调用该方法.所以`inject(:+)`扩展为`inject {| memo,obj | 备忘录.+(obj)}`.当你不给`inject`一个初始值时,它只使用第一个元素.[docs](http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-inject)值得阅读`:)`. (2认同)