我有一系列哈希......
array = [
{
'keyword' => 'A',
'total_value' => 50
},
{
'keyword' => 'B',
'total_value' => 25
},
{
'keyword' => 'C',
'total_value' => 40
},
{
'keyword' => 'A',
'total_value' => 10
},
{
'keyword' => 'C',
'total_value' => 15
}]
我需要合并具有相同keyword
值的哈希值。通过合并,我的意思是合并total_values
。例如,在合并上述数组之后,应该只有一个带有'keyword' => 'A'
'total_value => 60
答案 0 :(得分:2)
在向集合中添加项目时,一个简单的方法就是这样做。开始添加项目,检查关键字是否存在。如果(a)它在那里,那么只需将新项目的total_value添加到其中。否则(b)将新项目添加到集合中。
答案 1 :(得分:2)
array = [
{
'keyword' => 'A',
'total_value' => 50
},
{
'keyword' => 'B',
'total_value' => 25
},
{
'keyword' => 'C',
'total_value' => 40
},
{
'keyword' => 'A',
'total_value' => 10
},
{
'keyword' => 'C',
'total_value' => 15
}]
m = array.inject(Hash.new(0)) do |hs,i|
hs[i['keyword']] += i['total_value']
hs
end
p m
的输出:强> 的
{"A"=>60, "B"=>25, "C"=>55}
通过合并,我的意思是组合total_values。例如,在合并上面的数组之后,应该只有一个带有'keyword'=>的哈希值。 'a'的'total_value => 60
以下是如何做到的:
m = array.each_with_object(Hash.new(0)) do |h,ob|
if h['keyword'] == 'A'
h['total_value'] += ob['total_value']
ob.update(h)
end
end
p m
#=> {"keyword"=>"A", "total_value"=>60}
答案 2 :(得分:0)
array.group_by{|h| h["keyword"]}
.map{|k, v| {
"keyword" => k,
"total_value" => v.map{|h| h["total_value"]}.inject(:+)
}}