Более быстрое и менее сырное сопоставление предметов из 2 коллекций - PullRequest
0 голосов
/ 13 мая 2011

Привет! Мне нужно перебрать две коллекции, содержащие объекты разных типов, и сопоставить их, добавив соответствующие элементы в третий список.

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 ) );
                }
            }
        }
    }

Есть ли лучший / более эффективный способ сделать это? (Я немного упростил вещи, так как у меня есть некоторый код в моем коде, который копирует в новые локальные коллекции перед их повторением, так как у меня были проблемы с потоками.

1 Ответ

0 голосов
/ 13 мая 2011

Не уверен, что это за язык, но должен быть какой-то метод, подобный «существует» или «содержит», когда вы делаете два цикла последовательно. В псевдокоде

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

Таким образом, вы просматриваете каждую коллекцию только один раз, а не выполняете ListB N раз, когда ListA имеет N элементов. Имеет ли это смысл?

...