我有一个整数集合,我想按降序排序,除了在列表中保留0值作为第一个。
例如: 0,1,2,3,4,5,6,7,8
应该导致: 0,8,7,6,5,4,3,2,1
谢谢!
答案 0 :(得分: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);