3

可能重复:
比较两个集合是否相等

我有两个清单

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()。有没有办法在单一评估中做到这一点?

4

2 回答 2

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
        }
于 2012-11-24T10:07:52.347 回答
-4

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

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

您可能还想先检查一下,您必须检查其中一个列表或两者是否为空或为空。但前提是这种情况对您有任何特殊价值。

于 2012-11-24T10:05:30.680 回答