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