43

我想知道 groupBy 和 ToLookup 扩展方法有什么区别。

让我们有一个这样的对象列表:

public class Person
{
    public uint Id { get; set; }
    public string Name { get; set; }
    public DateTime Birthday { get; set; }
}


List<Person> People { get; set; }

现在我可以使用上面的扩展方法:

var groupedPeople = People.GroupBy((x) => x.Id);

var lookupPeople = People.ToLookup((x) => x.Id);

这些陈述之间有什么区别?

提前致谢。

马可·B。

4

2 回答 2

83

ToLookup使用立即执行,并返回一个ILookup允许您按键查找组的值。

GroupBy使用延迟执行,并仅按照每个组首次遇到的顺序返回您的组(例如,第一个组将包含源数据的第一个元素),不知道以后能够查找组按键。每次迭代结果时,它都必须再次分组。

基本上,你应该使用哪个取决于你要对结果做什么。如果您只是要对它们进行一次迭代(例如,进行进一步的转换),GroupBy通常没问题。如果您想将它们作为多个操作的集合,那么直接的性质ToLookup很有用。

于 2012-12-06T08:17:15.667 回答
15
  1. ToLookup 被缓冲。groupBy 迭代组。
  2. groupBy 使用延迟执行,而 ToLookup 使用立即执行。
于 2012-12-06T08:20:25.033 回答