2

3つのハッシュを取得したとしましょう:

hash1={
a => 1,
b => 2,
c => 4
}


hash2={
b => 1,
c => 3
}

hash3={
a => 2,
b => 1,
c => 3,
d => 4
}

キーに応じて新しいハッシュに平均化したいので、新しいハッシュは

result={a=>1.5,b=>4/3,c=>10/3,d=>4}

つまり、キーが1つのハッシュに存在しない場合、0としてカウントされません。

エレガントな方法はありますか?

4

1 に答える 1

4
result = {}
[hash1, hash2, hash3].each{|h| h.each{|k, v| (result[k] ||= []).push(v)}}
result.each{|k, v| result[k] = v.inject(:+).to_f/v.length}
result # =>
# {
#   a => 1.5,
#   b => 1.3333333333333333,
#   c => 3.3333333333333335,
#   d => 4.0
# }
于 2013-03-25T12:11:19.750 に答える