我有散列的数组...
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
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。 例如,在上述阵列的固结后,应该只有一个散列与“关键字” =>“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}
当你将项目添加到集合的简单的方法是这样做的。 开始添加项目,检查是否关键字是存在的。 如果(a)它的存在,则只需添加新项目的total_value它。 其他(二)新项目添加到集合。
array.group_by{|h| h["keyword"]}
.map{|k, v| {
"keyword" => k,
"total_value" => v.map{|h| h["total_value"]}.inject(:+)
}}