2012-11-24 25 views
3

可能重复:
Comparing two collections for equality检查两个列表在一个单一的评价相同的元素

我有两个列表

List<int> Foo = new List<int>(){ 1, 2, 3 }; 

List<int> Bar = new List<int>(){ 2, 1 }; 

要了解他们是否有相同的元素或者,我可没

if(Foo.Except(Bar).Any() || Bar.Except(Foo).Any()) 
{ 
    //Do Something 
} 

但这需要两个布尔评估。首先它是Foo.Except(Bar).Any(),然后是Bar.Except(Foo).Any()。有没有办法在单一评估中做到这一点?

+0

预期结果是什么 - 查找两个集合中是否有相同的元素,或者查找集合中的所有元素是否相同(但可能顺序不同)? –

+0

@lazyberezovsky:顺序并不重要。只是为了检查Foo中是否有元素,而不是Bar,或者是否在Bar中,而不是Foo中。 –

回答

-3

您不必检查两次。 就做这样的事情(注意美孚,它可以为空,抛出相关的异常)

if(Foo.Intersect(Bar).Any()) 
{ 
    //Do Something 
} 

您还可能要检查你首先要检查这些列表中的一个或两个是空的或null ..但只有当这种情况对你有任何特殊价值时才有效。

+0

它给出的例子返回true,但应该是假的 – Uriil

+0

当然它会工作? –

+0

我不认为这是海报想要的。它会让你知道是否有任何元素在两者之间共享,而不是如果所有的元素都被共享。 –

1
 var sharedCount = Foo.Intersect(Bar).Count(); 
     if (Foo.Distinct().Count() > sharedCount || Bar.Distinct().Count() > sharedCount) 
     { 
      // there are different elements 
     } 
     { 
      // they contain the same elements 
     } 
+0

'联合'适用于'不同'的结果。因此,如果初始序列具有非独特元素,则计数可能不相同 –

相关问题