Ruby 如何合并数组的散列?
我有一个数组:Ruby 如何合并数组的散列?,ruby,Ruby,我有一个数组: [ {a => 1, b => { c => 1, d => 1}}, {a => 1, b => { c => 1, d => 2}}, {a => 1, b => { c => 2, d => 2}}, {a => 2, b => { c => 1, d => 1}}, ] 我想将其更改为: [ {a => 1, b => [{ c => 1, d =
[
{a => 1, b => { c => 1, d => 1}},
{a => 1, b => { c => 1, d => 2}},
{a => 1, b => { c => 2, d => 2}},
{a => 2, b => { c => 1, d => 1}},
]
我想将其更改为:
[
{a => 1, b => [{ c => 1, d => [1, 2]}, { c => 2, d => [2]}]},
{a => 2, b=> [ { c=> 1, d => [1] } ]}
]
规则/要求:
- 与
值相同的哈希值转到一个哈希值a
应该是b
{c=>,d=>}
应该是一个数组d
使用相同的d
值转到同一数组c
- 这里有一个解决方案。它非常明确,因此不会推广到其他哈希结构
hashes = [
{:a => 1, :b => { :c => 1, :d => 1}},
{:a => 1, :b => { :c => 1, :d => 2}},
{:a => 1, :b => { :c => 2, :d => 2}},
{:a => 2, :b => { :c => 1, :d => 1}},
]
a_values = {}
hashes.each do |hash|
a_value = hash[:a]
a_values[a_value] ||= {}
c_value = hash[:b][:c]
a_values[a_value][c_value] ||= { :c => c_value, :d => [] }
d_value = hash[:b][:d]
a_values[a_value][c_value][:d].push(d_value)
end
# Now aggregate the results
results = a_values.map do |a_value, c_hashes|
b_arr = c_hashes.map { |c_value, c_hash| c_hash }
{ :a => a_value, :b => b_arr }
end
以下是输出:
[
{:a=>1, :b=>[{:c=>1, :d=>[1, 2]}, {:c=>2, :d=>[2]}]},
{:a=>2, :b=>[{:c=>1, :d=>[1]}]}
]
你是说a=>1还是
:a=>1
?如果不是,则a
是局部变量还是方法?考虑到您有a=>1
,c=>1
等,导致d=>[2]
而不是d=>2
和d=>[1]
而不是1
的规则是什么?您的问题是有问题的,因为生成输出的规则不清楚。