平均值嵌入在ruby哈希中

时间:2012-06-07 22:53:59

标签: ruby-on-rails ruby arrays hash

我有一个嵌入式哈希,我需要计算平均值。我已经成功地对它们进行了分组(来自未分组),但发现平均值对我不起作用

以下是示例哈希数据

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]]}

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

@r = @myhash.group_by(&:first)

我尝试了这个线程(What's the best way in Ruby to average sets in an array?)的两个解决方案,但都没有用。

好的问题。我希望结果按日期进行平均,因此我可以通过这种方式提供服务。

[{"2012-02-15" => 35"}, {"2012-02-22" => 22"}, {"2012-02-28" => 90"}]

2 个答案:

答案 0 :(得分: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}

答案 1 :(得分:0)

在rails中,Array类具有sum方法。您可以按如下方式使用它:

方法1

{}.tap{ |h| myhash.each{ |date, list| h[date] = list.sum(&:last)/list.size}

方法2

Hash[myhash.map{ |date, list| [date, list.sum(&:last)/list.size] }]