2
我发现这个问题,但一直无人接听尚未... What algorithm does Linq GroupBy use?Linq的GroupBy方法如何延迟执行?
既然你已经遍历整个源集合知道所有的群体,如何其执行被推迟?它会迭代源集合吗?它使用缓冲区吗?
我发现这个问题,但一直无人接听尚未... What algorithm does Linq GroupBy use?Linq的GroupBy方法如何延迟执行?
既然你已经遍历整个源集合知道所有的群体,如何其执行被推迟?它会迭代源集合吗?它使用缓冲区吗?
(我假设我们只谈论LINQ到对象。)
它仍然推迟在,直到你开始要求的结果,它不会读取源收集的。但是,是的,一旦你要求第一个结果,它确实会读取整个集合。它只会读取一次源,并且只会向每个元素请求一次分组键。正如你怀疑的那样,所有的结果都被缓冲在内存中。
我的Edulinq blog post on GroupBy(Edulinq基本上是为了教育起见将LINQ重新实现为对象)显示了一个示例实现,尽管这符合ToLookup
。
[参考实现](https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,1ee6acd1e1344f76)使用'GroupedEnumerable',它只是['Lookup'] (https://referencesource.microsoft.com/System.Core/R/cb695d4a973ef608.html)。 'Lookup'是'Dictionary>'的一个精简版本,同时重新实现'Dictionary'和'List'。 –
Johnbot