不仅仅是关于 LINQ to [在此处插入您最喜欢的提供程序],这个问题是关于搜索或过滤内存中的集合。
我知道 LINQ(或搜索/过滤扩展方法)适用于实现IEnumerable
或IEnumerable<T>
. 问题是:由于枚举的性质,每个查询的复杂度至少是O(n)吗?
例如:
var result = list.FirstOrDefault(o => o.something > n);
在这种情况下,每个算法至少需要O(n),除非list
是相对于 排序的'something'
,在这种情况下,搜索应该是O(log(n)):它应该是二分搜索。但是,如果我理解正确,此查询将通过枚举解决,因此它应该采用O(n),即使list
之前已订购。
- 我可以做些什么来解决O(log(n))中的查询吗?
- 如果我想要性能,我应该使用 Array.Sort 和 Array.BinarySearch 吗?