2013-01-03 49 views
2

我敢肯定,有人已經通過所有的值,但我循環回答這一點,但我無法找到正確的搜索條件,找到它......泛型列表匹配的任何值

我絕對可以做到這一點只是檢查是否有人知道更簡單的方法。

Dim List1 As New List(Of Integer) From {1,3,5,7}

Dim List2 As New List(Of Integer) From {2,4,6,8} 

List1.ContainsAnythingFrom(List2) = False 

因爲在任一列表中沒有匹配的數字。

Dim List1 As New List(Of Integer) From {1,**3**,5,7} 

Dim List2 As New List(Of Integer) From {2,**3**,6,8} 

List1.ContainsAnythingFrom(List2) = True 

因爲每個列表中有3個。

我在尋找一個ContainsAnything來自類型的函數。

+0

請編輯您的問題,並添加一個標籤爲你問的編程語言。 – Gerrat

+0

對不起,它是VB.Net。我似乎無法找到編輯我的問題或標籤的位置。找到了。 – Aaron

+0

在這裏看到一個更高性能的解決方案:http://stackoverflow.com/questions/17812042/check-whether-two-lists-have-at-least-one-common-item/17812043#17812043 – jor

回答

5

您可以使用LINQ Enumerable.Intersect方法來找到共同的項目

Dim list1 = New Integer() {1, 2, 3, 4, 5} 
Dim list2 = New Integer() {3, 4, 5, 6} 
Dim list3 = New Integer() {7, 8} 

Dim list1HasAnyOfList2 = list1.Intersect(list2).Any() 
' true 

Dim list1HasAnyOfList3 = list1.Intersect(list3).Any() 
' false 
+0

正是我所需要的。謝謝! – Aaron

+1

@Aaron:請注意,當您交叉時,第二個列表完全枚舉。因此,爲了獲得更好的性能,建議將較小的列表作爲第二個參數。 (i.e.'largeList.Intersect(smallList)')。 –

0
Dim l1 As New List(Of String) From {"a", "b", "c", "d"} 

    Dim l2 As New List(Of String) From {"e", "f", "c", "d"} 

    Dim intersection As IEnumerable(Of String) = l1.Intersect(l2) 

    ' Dim result As List(Of String) = l1.Intersect(l2).ToList() 

    For Each s In intersection 
     Console.WriteLine(s) 
    Next