Linq OrderByDescending 但首先保留零值

发布于 2024-10-23 13:56:29 字数 118 浏览 1 评论 0原文

我有一个整数集合,我想按降序值排序,但将 0 值保留在列表中的第一个值除外。

例如: 0,1,2,3,4,5,6,7,8

应得出: 0,8,7,6,5,4,3,2,1

谢谢!

I have a collection of integers that I want to order by descending value, with the exception of keeping a 0 value as first in the list.

For example:
0,1,2,3,4,5,6,7,8

Should result in:
0,8,7,6,5,4,3,2,1

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ゝ杯具 2024-10-30 13:56:29
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);
var input = new [] {0,1,2,3,4,5,6,7,8};

Two sortings which work with both negative and positive numbers:

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

or this if all your numbers are non-negative:

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

or some really weird solution if you have both negative and positive numbers but you don't want to sort twice (as I'm doing in first solution):

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文