我知道这听起来可能是重复的问题(比如这个或者这个)但是我想要清楚一下这个查询中会发生的数字迭代.
我的假设如下:
假设我收集了1000件商品.
在Where()查询中,它遍历每个项目并将其添加到IEnumerable.即它总是需要O(n).
foreach (var item in myList)
{
if(//<condition>)
{
//add it to list/enumerable
}
//continue through entire list
}
Run Code Online (Sandbox Code Playgroud)在FirstOrDefault(<condition>)
查询中,它开始迭代集合并在获得与之匹配的项<condition>
并且返回单个元素时立即中断循环,或者仅在没有项匹配的情况下断开循环,<condition>
然后它将遍历整个列表.
所以复杂性可以从O(1)到O(n)
foreach (var item in myList)
{
if(//<condition>)
{
//return item
break;
}
}
Run Code Online (Sandbox Code Playgroud)
如果这是正确的,那么将FirstORDefault用于单个项目返回总是更好.
Dan*_*ite 15
Where
实际上是延期 - 即在枚举发生之前它没有任何成本.
Where
看起来有点像这样,并返回一个新的IEnumerable<T>
.
foreach (var item in enumerable)
{
if (condition)
{
yield return item;
}
}
Run Code Online (Sandbox Code Playgroud)
FirstOrDefault
回报T
.
归档时间: |
|
查看次数: |
3555 次 |
最近记录: |