2011-05-12 8 views
0

こんにちは私は、異なるオブジェクトタイプを含む2つのコレクションを繰り返し、いくつかのマッチングを行い、一致したアイテムを3番目のリストに追加する必要があります。2つのコレクションからのアイテムのより速く、より安価な一致

private CheesyMatch(BindingList<MyTypeA> theListA, BindingList<MyTypeB> theListB) 
    { 
     foreach(MyTypeA item in theListA) 
     { 
      foreach(MyTypeB item2 in theListB) 
      { 
       if(item.name == item2.name) 
       { 
        item.matched = true; 
        item2.matched = true; 
        MyMatchedList.items.add(new matchedItem(item, item2)); 
       } 
      } 
     } 
    } 

これを行うには、より効率的な方法がありますか? (私はコードをいくつかシンプルにしていますが、コードを反復する前に新しいローカルコレクションにコピーしているので、スレッドの問題が発生しています)

答えて

0

これはどんな言語なのでしょうか「存在する」か、直列の2つのループを行う場所「が含まれる」が好きだった。擬似コードで

foreach item in ListA 
    if ListB.exists(item) then 
     MatchedList.items.add(item) 
    end if 
endfor 
foreach item in ListB 
    if ListA.exists(item) then 
     MatchedList.items.add(item) 
    end if 
endfor 

あなただけではなくリスタは、N個のアイテムを持ってListBのN回行うよりも、一度、各コレクションの上に行くその方法は。このメイクをい感覚?

+0

本当に?存在しているのは何ですか? – Andrey

+0

おそらくそれは要素の下位レベルの検索を使用しています。あなたがこの謎の言語で欲しいならば、 – MikeMurko

+0

はい、それは意味がありますが、TypeAとその中のTypeB(および他のもの)への参照を含む3番目のクラス(MatchedItem)があるので、それらを両方とも構築時に追加する必要があります。 –