【发布时间】:2013-11-18 15:36:42
【问题描述】:
我知道这听起来可能是一个重复的问题(例如 this 或 this ),但我想弄清楚此查询中将发生的数字迭代。
我的假设如下:
假设我收集了 1000 件物品。
-
在 Where() 查询中,它遍历每个项目并将其添加到 IEnumerable。即它总是需要 O(n)。
foreach (var item in myList) { if(//<condition>) { //add it to list/enumerable } //continue through entire list } 在
FirstOrDefault(<condition>)查询中,它开始遍历集合,并在获得与<condition>匹配的项目并返回单个元素或仅当没有项目与<condition>匹配时才返回循环将遍历整个列表。
所以复杂度可以从 O(1) 到 O(n)
foreach (var item in myList)
{
if(//<condition>)
{
//return item
break;
}
}
如果这是正确的,那么最好使用 FirstORDefault 进行单件退货。?
【问题讨论】:
-
Big-O 表示为最坏的情况。
FirstOrDefault()将是 0(n)。 -
对于单件退货,您应该使用
FirstOrDefault(或类似的方法,例如Single),而不是Where,因为这是它最好的表达方式。它是否比其他实现更快是另一个问题。