2012-12-04 68 views
4

我使用OrderBy並行排列對象列表的整數ID。我有一些具有相同ID的對象,需要穩定。使C#ParallelEnumerable.OrderBy穩定排序

根據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; 
    } 
} 
+0

我試過ThenBy爲好,但還沒有得到它的工作。 –

+0

你是說在另一個'OrderBy'方法的註釋中的例子不起作用嗎? http://msdn.microsoft.com/en-us/library/dd383662.aspx –

+0

我以爲我點擊了兩個方法頁面,但顯然我在看重錯誤的方法。 –

回答

8

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

完美工作。感謝更清晰的代碼示例。微軟使用變量名稱e和我並不太清楚。 –