我有一個整數的集合,我想按降序排列,除了保留0值作爲列表中的第一個值。Linq OrderByDescending但保持零值首先
例如: 0,1,2,3,4,5,6,7,8
應導致: 0,8,7,6,5,4,3,2, 1
謝謝!
我有一個整數的集合,我想按降序排列,除了保留0值作爲列表中的第一個值。Linq OrderByDescending但保持零值首先
例如: 0,1,2,3,4,5,6,7,8
應導致: 0,8,7,6,5,4,3,2, 1
謝謝!
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);
+1爲ThenByDescending。以前從未使用過。 – 2011-03-17 14:10:06
非常好。我知道有人會有一個優雅的解決方案。 – 2011-03-17 14:12:53
或者將它轉換爲等價的LINQ語句:'我輸入的順序是i == 0? 0:1,我降'。 – Steven 2011-03-17 14:16:01
也許嘗試創建比較器? – nilphilus 2011-03-17 14:00:22