LINQ的Enumerable方法是否保持元素的相对顺序?
假设我有List<Foo> foos
,其中元素的当前顺序很重要。 如果我然后应用LINQ Enumerable方法(如GroupBy
, Where
或Select
,我可以依赖生成的IEnumerable<Foo>
以与原始列表相同的相对顺序进行迭代吗?
是的,对于Enumerable
方法(LINQ to Objects,适用于您提到的List<T>
),您可以依赖Select
, Where
或GroupBy
返回的元素的顺序。 对于像ToDictionary
或Distinct
这样天生无序的事物,情况并非如此。
来自Enumerable.GroupBy文档:
IGrouping<TKey, TElement>
对象按照产生每个IGrouping<TKey, TElement>
的第一个键的源中元素的顺序排序。 分组中的元素按它们在source
出现的顺序排序。
对于IQueryable
扩展方法(其他LINQ提供者),这不一定是正确的。
上一篇: Do LINQ's Enumerable Methods Maintain Relative Order of Elements?