我知道这听起来可能是重复的问题(比如this or this)但我想清楚地了解此查询中将发生的迭代次数。
我的假设如下:
假设我收藏了 1000 件物品。
-
在Where() 查询中,它迭代每个项目并将其添加到IEnumerable。即它总是需要 O(n) 。
foreach (var item in myList)
{
if(//<condition>)
{
//add it to list/enumerable
}
//continue through entire list
}
In FirstOrDefault(<condition>)
查询,它开始迭代集合,并在获得与查询匹配的项目后立即中断循环<condition>
并返回单个元素或仅当没有项目匹配时返回<condition>
然后它将迭代整个列表。
所以复杂度可以从 O(1) 到 O(n)
foreach (var item in myList)
{
if(//<condition>)
{
//return item
break;
}
}
如果这是正确的,那么使用 FirstORDefault 进行单个项目返回总是更好。?
Where
实际上是延迟的 - 即在枚举发生之前它没有任何成本。
Where
看起来有点像这样,并返回一个新的IEnumerable<T>
.
foreach (var item in enumerable)
{
if (condition)
{
yield return item;
}
}
FirstOrDefault
回报T
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)