查找与groupby

Mar*_* B. 36 .net c# linq

我想知道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; }
Run Code Online (Sandbox Code Playgroud)

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

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

var lookupPeople = People.ToLookup((x) => x.Id);
Run Code Online (Sandbox Code Playgroud)

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

提前致谢.

马可B.

Jon*_*eet 68

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

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

基本上,你应该使用哪个取决于你将如何处理结果.如果你只是一次迭代它们(例如进一步转换),GroupBy通常很好.如果您希望将它们保留为多个操作的集合,则直接性质ToLookup很有用.


J. *_*son 12

  1. ToLookup是缓冲的.groupBy迭代组.
  2. groupBy使用deffered执行,而ToLookup使用immediate.