gpt4 book ai didi

.net - 确定IEnumerable 是否包含另一个IEnumerable 的任何对象

转载 作者:行者123 更新时间:2023-12-03 14:37:06 24 4
gpt4 key购买 nike

我有2个IEnumerable<int>

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


确定x中是否存在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的整数不超过50,y的整数不超过4。

最佳答案

使用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扩展方法,因为以下在语义上是等效的:


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

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


sequence.Count != 0
sequence.Any()

关于.net - 确定IEnumerable <T>是否包含另一个IEnumerable <T>的任何对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/691145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com