我想知道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);
这些陈述之间有什么区别?
提前致谢。
Marco B.
答案 0 :(得分:64)
ToLookup
使用立即执行,并返回ILookup
,可让您按键查找组。
GroupBy
使用延迟执行,只是按照第一次遇到每个组的顺序返回组(因此第一个组将包含源数据的第一个元素,例如),不知道以后能否通过密钥查看组。每次迭代结果时,都必须再次分组。
基本上,您应该使用哪种取决于您要对结果做什么。如果您只是一次迭代它们(例如进一步转换),GroupBy
通常很好。如果您希望将它们保留为多个操作的集合,ToLookup
的直接性质很有用。
答案 1 :(得分:12)