Найти список предметов между 2 списками vb.net - PullRequest
2 голосов
/ 15 сентября 2011

Я хочу проверить для каждого элемента в списке, если элемент существует, затем добавить его в список3

for each item in listbox2.items
if listbox1.items.contains (item) then
listbox3.item.add (item)
end if
next

но это очень медленно, если есть способ поиска списка элементов в списке сразу?

Ответы [ 3 ]

1 голос
/ 15 сентября 2011

Вы можете использовать метод Пересечение , чтобы получить все элементы, которые они оба содержат.http://msdn.microsoft.com/en-us/library/bb460136.aspx

Это будет выглядеть примерно так.Приведенный ниже код не проверен.

 For Each item in listbox2.items.Intersect(listbox1.items)
        listbox3.item.add (item)
    Next

РЕДАКТИРОВАТЬ: Таким образом, если посмотреть на него, кажется, что элементы - это коллекция объектов, которая не содержит пересечений.Чтобы обойти это, вы можете попробовать.

For Each item in listbox2.items.Cast(Of Enumerable).Intersect(listbox1.items.Cast(Of Enumerable))
            listbox3.item.add (item)
        Next

Не уверен, насколько быстро это будет, хотя

0 голосов
/ 15 сентября 2011

Я создал список из 90 000 строк, и это сработало мгновенно:

ListBox3.DataSource = ListBox1.Items.Cast(Of IEnumerable).Intersect(ListBox2.Items.Cast(Of IEnumerable)).ToList
0 голосов
/ 15 сентября 2011

Если коллекция элементов каждого Listbox не имеет большой величины, я не вижу ничего плохого в этом подходе (кроме незначительных ошибок кодирования).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...