2011-03-17 47 views

回答

8
var input = new [] {0,1,2,3,4,5,6,7,8}; 

兩個分類法,其作品既正數和負數:

var result = input.OrderBy(i => i == 0? 0 : 1).ThenByDescending(i => i); 

或者這一點,如果你所有的數字都是非負:

var result = input.OrderByDescending(i => i == 0? int.MaxValue : i); 

,或者如果你的一些很奇怪的解決方案同時具有負數和正數,但您不想分類兩次(如我在第一個解決方案中所做的):

var result = input 
       .GroupBy(i => i == 0 ? 0 : 1) 
       .OrderBy(g => g.Key) 
       .Select(g => g.Key == 0 ? g : g.OrderByDescending(i => i) 
       .SelectMany(g => g); 
+0

+1爲ThenByDescending。以前從未使用過。 – 2011-03-17 14:10:06

+1

非常好。我知道有人會有一個優雅的解決方案。 – 2011-03-17 14:12:53

+0

或者將它轉換爲等價的LINQ語句:'我輸入的順序是i == 0? 0:1,我降'。 – Steven 2011-03-17 14:16:01