我有一个整数集合,我想按降序排序,除了在列表中保持0值作为第一个.
例如: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};
Run Code Online (Sandbox Code Playgroud)
两种排序与负数和正数一起使用:
var result = input.OrderBy(i => i == 0? 0 : 1).ThenByDescending(i => i);
Run Code Online (Sandbox Code Playgroud)
或者如果您的所有数字都是非负数:
var result = input.OrderByDescending(i => i == 0? int.MaxValue : i);
Run Code Online (Sandbox Code Playgroud)
或者一些非常奇怪的解决方案,如果你有负数和正数,但你不想排序两次(正如我在第一个解决方案中做的那样):
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);
Run Code Online (Sandbox Code Playgroud)