LINQ的可枚举方法是否维持元素的相对顺序?
假设我有List foos
,其中元素的当前顺序很重要。 如果我然后应用LINQ Enumerable方法,如GroupBy
, Where
或Select
,我可以依赖生成的IEnumerable
以与原始列表相同的相对顺序进行迭代吗?
是的,对于Enumerable
方法(LINQ to Objects,适用于您提到的List
),您可以依赖Select
, Where
或GroupBy
返回的元素的顺序。 对于像ToDictionary
或Distinct
这样天生无序的东西,情况并非如此。
从Enumerable.GroupBy文档:
IGrouping
对象的生成顺序基于源中元素的顺序,这些元素生成每个IGrouping
的第一个键。 分组中的元素按它们在source
出现的顺序生成。
对于IQueryable
扩展方法(其他LINQ提供程序),这不一定如此。