2013-01-03 45 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