我有;
var maxVal = l.TakeWhile(x=>x < val).Where(x=>Matches(x)).Max();
这需要多少空间? linq 是否建立了上述 Where() 条件的列表,或者 Max() 只是遍历 IEnumerable 以跟踪当前的 Max() 是什么?
除了在 SO f 上询问之外,我在哪里可以找到有关此的更多信息
最佳答案
我已经用 Reflector 验证了 Enumerable.TakeWhile、Enumerable.Where 和 Enumerable.Max 中的每一个都在恒定空间中运行。因此,整个查询应该在常量空间中运行。 毫不奇怪,考虑到 TakeWhile 和 Where 被指定使用延迟执行 + 流。 Max不使用延迟执行,只需要在source enumerable上存储'max so far'和枚举数。
关于c# - 简单 linq(to objects) 查询的空间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3435803/