使用linq和ToLookup()保留值的顺序

Dan*_*Dan 16 linq

虽然我很确定从linq的ToLookup方法返回时键是无序的,但的顺序是否保留?我找不到任何说明这种或那种方式的文档.

Str*_*ior 16

是的。根据文档

每组中的值的顺序与 中的顺序相同source


dah*_*byk 13

当前的实现ToLookup()确实保留了值的顺序(检查实现Lookup<TKey,TElement>.Grouping<TKey,TElement>.Add()),但我不相信它保持这种方式.为了保证订货,你最好的选择可能是包含元素的原始索引,可能使用Select与指数超载排序一遍,然后.

  • 由于顺序稳定性的这一属性已记录在案并成为 LINQ 默认值,因此极有可能保持这种状态。然而,很容易忽视的是,这仅在“ToLookup()”的结果上得到保证,**不适用于任何给定的“ILookup&lt;TKey, TElement&gt;”**。毕竟,任何人都可以自由地使用他们自己的该接口的实现。因此,您可能会完全依赖顺序稳定性,但您不应该依赖它来进行从其他方法收到的任何查找。:) (5认同)