c# – 确定IEnumerable <>是否包含另一个IEnumberable <> - .Net 3.5的任何对象

我有2个IEnumerable< int>

IEnumerable<int> x;
IEnumerable<int> y;

确定y中是否存在任何int的最佳方法是什么?
目前我正在使用:

return x.Intersect<int>(y).Count() > 0;

逐个循环通过并单独测试一次会显着加快吗?

foreach (int i in x)
{
    foreach (int j in y)
    {
        if (i == j) return true;
    }
}
return false;

列表相对较轻,如果考虑重要,则x和4中的不超过50个int。

使用Any method而不是Count method将是最快的:

return x.Intersect<int>(y).Any();

这假设IEnumerable<int>实现也不实现ICollection<int>.在这种情况下,Count(在IEnumerable< T>实现ICollection< T>的情况下)是O(N)操作,而Any始终为O(1)操作。 (因为它只检查单个元素)。然而,Count的行为是一个实现细节,你不应该依赖它。

我已经写了更深入的in a blog post,详细介绍了何时使用Count()和Any()。综上所述:

>使用Enumerable.Any扩展方法来检查序列中元素的存在。
>请勿将Enumerable.Count扩展方法与0进行比较,如下所示在语义上相当于:

> sequence.Count()== 0
>!sequence.Any()

>不要使用Enumerable.Count扩展方法与“not zero”条件进行比较,如下所示在语义上相当于:

> sequence.Count!= 0
> sequence.Any()

翻译自:https://stackoverflow.com/questions/691145/determine-if-an-ienumerable-contains-any-object-of-another-ienumberable-n

转载注明原文:c# – 确定IEnumerable <>是否包含另一个IEnumberable <> - .Net 3.5的任何对象