2011-09-15 25 views
2

我想您在列表框中的每個項目,如果項目存在,那麼添加的列表它listbox3找到2個列表框vb.net之間的項目

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

但它是非常緩慢的,如果有方法來搜索一次列表框中的項目列表?

回答

0

除非每個Listbox的項目集合數量很大,否則我沒有發現這種方法有什麼問題(除了次要的編碼錯誤外)。

+0

它看起來快,當你在listbox2但如果你有一些項目在兩個列表框中都有超過9萬個項目,那麼它非常緩慢。 – user934820

+0

「如果你有兩個以上的9萬個項目」 - 是的,這將是緩慢的。也許把每個項目的ID放到一個Dictionary對象中並操縱它來查找匹配會更快,但是我對'Contains()'正在做的「冒險之中」知道這是否更有效率還不夠熟悉。 – Widor

1

您可以使用Intersect方法獲取它們都包含的所有項目。 http://msdn.microsoft.com/en-us/library/bb460136.aspx

它看起來很像。以下代碼未經測試。

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

編輯:所以看着它之後,它似乎是項目不包含相交的objectcollection。爲了解決這個問題,你可以嘗試。

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

不知道有多快,這將是雖然

0

我創造了90000個的字符串列表,該工作瞬間:

ListBox3.DataSource = ListBox1.Items.Cast(Of IEnumerable).Intersect(ListBox2.Items.Cast(Of IEnumerable)).ToList 
相關問題