当前位置:  开发笔记 > 编程语言 > 正文

确定IEnumerable <T>是否包含另一个IEnumberable <T>的任何对象

如何解决《确定IEnumerable<T>是否包含另一个IEnumberable<T>的任何对象》经验,为你挑选了1个好方法。

我有2个 IEnumerable

IEnumerable x;
IEnumerable y;

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

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

是否可以明显更快地循环并单独测试每个?

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

列表相对较轻,如果在考虑中重要,则x中不超过50个,y中不超过4个.



1> casperOne..:

这将是最快的使用Any方法,而不是Count方法:

return x.Intersect(y).Any();

这假设IEnumerable实现也没有实现ICollection.在这种情况下,Count(在的情况下IEnumerable工具ICollection)是O(N)操作,同时Any总是为O(1)的操作.(因为它只检查单个元素).但是,行为Count是一个实现细节,你不应该依赖它.

我在博客文章中更深入地写了这篇文章,详细介绍了何时使用Count()vs Any()..综上所述:

使用Enumerable.Any扩展方法检查序列中是否存在元素.

请勿Enumerable.Count在与零进行比较时使用扩展方法,因为以下内容在语义上是等效的:

sequence.Count() == 0

!sequence.Any()

请勿Enumerable.Count在与"非零"条件进行比较时使用扩展方法,因为以下内容在语义上是等效的:

sequence.Count != 0

sequence.Any()

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有