【发布时间】:2014-04-02 06:04:14
【问题描述】:
我有对象列表。我需要按属性排序,然后按一组其他属性对结果进行分组,但这样做只会更改排序并首先维护组。如果需要,我需要在保持排序的同时分离组。 我尝试了两种方法
- 简单的排序和分组
model.OrderBy(o => o.OrderKey).GroupBy(o=> new {o.Key1, o.Key2})
- 按有序列表 (PLINQ) 排序,然后按组排序
model.OrderBy(o => o.OrderKey).AsParallel().AsOrdered().GroupBy(o=> new {o.Key1, o.Key2})
我的输入会是这样的
OrderKey Key1 Key2
a 1 2
b 1 2
c 1 3
d 1 2
我希望输出是这样的
[
[a, 1, 2],
[b, 1, 2]
],
[
[c, 1, 3]
],
[
[d, 1, 2]
]
【问题讨论】:
-
[d, 1, 2] 也属于第一组。
-
@UfukHacıoğulları 我认为 Serene 的观点是不应该;我认为他想先排序,然后只将那些紧随其后的元素分组,这就是为什么 [c, 1, 3] 会拆分其他两个。
-
我在 Google 上搜索了这个:“linq Group By Consecutive”,结果很好 - codereview.stackexchange.com/q/6512/34932 - stackoverflow.com/q/4881363/1271037 - stackoverflow.com/q/4100375/1271037
-
在MoreLINQ 中还有一个叫做
GroupAdjacent的方法可以做到这一点。