0

いくつかの配列があります (それらを「元の配列」と呼びましょう)。各配列にはハッシュが含まれており、各ハッシュ内には受信メールからのデータがあります。たとえば、電子メールアドレス、名前などです。受信した電子メールの一意の識別子である 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}}]
   ]]

多くのループと繰り返しを必要とするソリューションしか思いつきませんが、配列が非常に大きくなる可能性があるため、これには効率的で簡潔なルーチンが必要です。誰でも私を助けることができますか?

4

1 に答える 1