У меня есть несколько массивов (назовем их «оригинальными массивами»). Каждый массив содержит хеши, и внутри каждого хэша у меня есть данные из полученного письма. Например, адрес электронной почты, имя и т. Д. У меня также есть uid, который является уникальным идентификатором полученного письма. Будет много дублирования между оригинальными массивами, и чем больше у массивов, тем лучше (в идеальном мире они должны содержать одни и те же электронные письма и те же данные электронной почты).Объединить массивы хэшей в один массив, а затем сгруппировать все хэши на основе совпадающего идентификатора
ввода пробы:
[[{:from_address=>"[email protected]",
:to=>"[email protected]",
:subject=>"Some subject regarding order 12198",
:datetime=>Sat, 27 Jul 2013 08:48:44 +0000,
:uid=>15065,
:extraction_strategy=>1,
:result=>{:order_id=>"12198", :mail_address=>nil, :name=>"Dr. Evil"}},
{:from_address=>"[email protected]",
:to=>"[email protected]",
:subject=>"Some subject regarding order 12199",
:datetime=>Sat, 27 Jul 2013 08:48:48 +0000,
:uid=>15066,
:extraction_strategy=>1,
:result=>{:order_id=>"12199", :mail_address=>nil, :name=>nil}}],
[{:from_address=>"[email protected]",
:to=>"[email protected]",
:subject=>"Some subject regarding order 12197",
:datetime=>Sat, 27 Jul 2013 08:22:48 +0000,
:uid=>15064,
:extraction_strategy=>2,
:result=>{:order_id=>"12197", :mail_address=>"[email protected]", :name=>"Batman"}},
{:from_address=>"[email protected]",
:to=>"[email protected]",
:subject=>"Some subject regarding order 12199",
:datetime=>Sat, 27 Jul 2013 08:48:48 +0000,
:uid=>15066,
:extraction_strategy=>2,
:result=>{:order_id=>"12199", :mail_address=>"[email protected]", :name=>"James Bond"}}]]
Теперь я хочу, чтобы изменить порядок все это так что я получаю один новый массив (назовем его «массив первого уровня»). Внутри массива 1-го уровня я хочу «массивы второго уровня», каждый из которых содержит электронные письма с соответствующими uid. Поэтому, если электронное письмо от одного из исходных массивов имеет тот же uid, что и адрес электронной почты в одном из других исходных массивов, два письма должны быть помещены в один и тот же новый массив второго уровня.
образец Выхода:
[[
[{:from_address=>"[email protected]",
:to=>"[email protected]",
:subject=>"Some subject regarding order 12197",
:datetime=>Sat, 27 Jul 2013 08:22:48 +0000,
:uid=>15064,
:extraction_strategy=>2,
:result=>{:order_id=>"12197", :mail_address=>"[email protected]", :name=>"Batman"}}],
[{:from_address=>"[email protected]",
:to=>"[email protected]",
:subject=>"Some subject regarding order 12198",
:datetime=>Sat, 27 Jul 2013 08:48:44 +0000,
:uid=>15065,
:extraction_strategy=>1,
:result=>{:order_id=>"12198", :mail_address=>nil, :name=>"Dr. Evil"}}],
[{:from_address=>"[email protected]",
:to=>"[email protected]",
:subject=>"Some subject regarding order 12199",
:datetime=>Sat, 27 Jul 2013 08:48:48 +0000,
:uid=>15066,
:extraction_strategy=>1,
:result=>{:order_id=>"12199", :mail_address=>"[email protected]", :name=>"James Bond"}},
{:from_address=>"[email protected]",
:to=>"[email protected]",
:subject=>"Some subject regarding order 12199",
:datetime=>Sat, 27 Jul 2013 08:48:48 +0000,
:uid=>15066,
:extraction_strategy=>2,
:result=>{:order_id=>"12199", :mail_address=>nil, :name=>nil}}]
]]
Я могу только придумать решения, что требует много петель и повторения, но как массивы могут получить довольно огромные мне нужен эффективную краткую рутину для этого. Может кто-нибудь мне помочь?
Вы можете опубликовать некоторые из своих решений. мы могли бы сделать их более эффективными, если бы у нас была начальная точка. –