查找 vs. 分组统计

48

我在想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。


定义“差异”...一个差异可能是“返回值”,另一个是具体实现...详细说明! - user57508
http://bytes.com/topic/c-sharp/answers/777912-linq-groupby-vs-tolookup - Jan P.
1
https://dev59.com/InM_5IYBdhLWcg3wiDuA - AliRıza Adıyahşi
2个回答

92
ToLookup 使用立即执行,返回一个ILookup,允许您通过键来查找组。 GroupBy 使用延迟执行,并按照每个组第一次出现的顺序返回组(例如,第一组将包含源数据的第一个元素),没有办法通过键稍后查找这些组。每次您遍历结果时,都需要重新进行分组。
基本上,您应该使用哪个取决于您要如何处理结果。如果您只打算对它们进行单次迭代(例如,用于进一步转换),那么GroupBy通常就足够了。如果您希望将它们保留为集合以供多个操作使用,则ToLookup的立即性质是有用的。

谢谢您先生 :) - Ivandro Jao

15
  1. ToLookup是有缓冲的,而groupBy遍历群组。
  2. groupBy使用延迟执行而ToLookup使用立即执行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接