3

平均を計算する必要がある埋め込みハッシュがあります。私はすでにそれらを正常にグループ化しました(グループ化されていない状態から)が、平均を見つけることがうまくいきません

これがハッシュデータの例です

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)

このスレッドの両方のソリューションを試しました ( Ruby で配列内のセットを平均化する最良の方法は何ですか? ) が、どちらも機能しませんでした。

良い質問。結果を日付ごとに平均化したいので、そのように提供できます。

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

2 に答える 2

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}
于 2012-06-07T23:08:53.237 に答える
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] }]
于 2012-06-08T01:57:07.300 に答える