【问题标题】:Make C# ParallelEnumerable.OrderBy stable sort使 C# ParallelEnumerable.OrderBy 稳定排序
【发布时间】:2012-12-04 18:34:05
【问题描述】:

我正在使用 OrderBy 按整数 ID 对对象列表进行并行排序。我有一些具有相同 id 的对象,需要排序稳定。

根据Microsoft's documentation的说法,并行化的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;
  }
}

【问题讨论】:

  • 我也尝试过 ThenBy,但还没有成功。
  • 你是说另一个OrderBy方法的注释中的例子不起作用? msdn.microsoft.com/en-us/library/dd383662.aspx
  • 我以为我点击了两个方法页面,但显然我正在查看错误的重载方法。

标签: c# linq sorting parallel-processing plinq


【解决方案1】:

the other OrderBy method 的备注建议采用这种方法:

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);

【讨论】:

  • 完美运行。也感谢更清晰的代码示例。微软对变量名 e 和 i 的使用不太清楚。
猜你喜欢
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 2016-05-23
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
相关资源
最近更新 更多