使 ParallelEnumerable.OrderBy 稳定排序

问题描述 投票:0回答:1

我正在使用

OrderBy
按对象的整数 ID 并行对对象列表进行排序。我有几个具有相同 id 的对象,需要排序保持稳定。

根据微软的文档,并行化的

OrderBy
并不稳定,但是有一个实现方法可以使其稳定。但是,我找不到这方面的例子。

var list = new List<pair>() { new pair("a", 1), new pair("b", 1), new pair("c", 2), new pair("d", 3), new pair("e", 4) };
var newList = list.AsParallel().WithDegreeOfParallelism(4).OrderBy<pair, int>(p => p.order);

private class pair {
  private String name;
  public int order;
 
  public pair (String name, int order) {
    this.name = name;
    this.order = order;
  }
}
c# linq sorting parallel-processing plinq
1个回答
9
投票

其他

OrderBy
方法的注释建议采用这种方法:

var newList = list
   .Select((pair, index) => new { pair, index })
   .AsParallel().WithDegreeOfParallelism(4)
   .OrderBy(p => p.pair.order)
   .ThenBy(p => p.index)
   .Select(p => p.pair);
© www.soinside.com 2019 - 2024. All rights reserved.