いくつかの配列があります (それらを「元の配列」と呼びましょう)。各配列にはハッシュが含まれており、各ハッシュ内には受信メールからのデータがあります。たとえば、電子メールアドレス、名前などです。受信した電子メールの一意の識別子である uid もあります。元の配列間には多くの重複があり、配列の共通点が多いほど良い (完全な世界では、同じ電子メールと同じ電子メール データが含まれている必要があります)。
入力サンプル:
[[{:from_address=>"one@example.com",
:to=>"one@example.com",
: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=>"one@example.com",
:to=>"one@example.com",
: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=>"one@example.com",
:to=>"one@example.com",
: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=>"three@example.com", :name=>"Batman"}},
{:from_address=>"one@example.com",
:to=>"one@example.com",
: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=>"two@example.com", :name=>"James Bond"}}]]
これをすべて並べ替えたいので、新しい配列を 1 つ取得します (これを「第 1 レベルの配列」と呼びましょう)。第 1 レベルの配列内には、「第 2 レベルの配列」が必要で、それぞれに uid が一致する電子メールが含まれています。したがって、元の配列の 1 つからの電子メールが他の元の配列の 1 つにある電子メールと同じ uid を持つ場合、2 つの電子メールは同じ新しい第 2 レベルの配列に配置する必要があります。
出力サンプル:
[[
[{:from_address=>"one@example.com",
:to=>"one@example.com",
: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=>"three@example.com", :name=>"Batman"}}],
[{:from_address=>"one@example.com",
:to=>"one@example.com",
: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=>"one@example.com",
:to=>"one@example.com",
: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=>"two@example.com", :name=>"James Bond"}},
{:from_address=>"one@example.com",
:to=>"one@example.com",
: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}}]
]]
多くのループと繰り返しを必要とするソリューションしか思いつきませんが、配列が非常に大きくなる可能性があるため、これには効率的で簡潔なルーチンが必要です。誰でも私を助けることができますか?