我发现了这个问题,但它还没有答案...... What algorithm does Linq GroupBy use?
由于您必须遍历整个源集合以了解所有组,因此如何延迟执行?它只会迭代源集合一次吗?它是否使用缓冲区?
答案 0 :(得分:7)
(我假设我们只讨论LINQ to Objects。)
在您开始询问结果之前,它仍然是延迟的,它根本不会读取源集合。但是,是的,一旦你要求第一个结果,它确实会读取整个集合。它只读取一次源,它只询问每个元素的分组键一次。正如您所怀疑的那样,所有结果都会缓存在内存中。
我的Edulinq blog post on GroupBy(Edulinq基本上是为了教育而重新实现LINQ to Objects)显示了一个示例实现,尽管这是ToLookup
。