首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#软数与输入的差

C#软数与输入的差
EN

Stack Overflow用户
提问于 2021-03-15 14:21:03
回答 2查看 86关注 0票数 1

我有下面的代码。请帮我得到我想要的输出。我有一个数字列表,然后我有一个输入值,即4。我希望我的列表首先根据0差排序,然后其余的将上升。例如,在我的列表中有4s。我的输入是4,所以我想对数字条目输入value=0 (4-4=0)的数字进行排序。

C#

代码语言:javascript
复制
    static void Main(string[] args)
    {
        var numbers = new List<int> { 1, 2, 3, 4, 4, 5, 6, 7, 4, 8, 1, 4 };
        var sortedNumbers = numbers.OrderBy(x => x - 4 == 0);
        foreach (var item in sortedNumbers)
        {
            Console.WriteLine(item);
        }
        Console.ReadLine();
    }

输出

代码语言:javascript
复制
1
2
3
5
6
7
8
1
4
4
4
4

期望输出

代码语言:javascript
复制
4
4
4
4
1
1
2
3
5
6
7
8
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-15 14:38:36

您可以通过在OrderBy lambda中使用三元表达式实现所需的输出:

代码语言:javascript
复制
    static void Main(string[] args)
    {
        var numbers = new List<int> { 1, 2, 3, 4, 4, 5, 6, 7, 4, 8, 1, 4 };
        var sortedNumbers = numbers.OrderBy(x => x==4? int.MinValue: x);
        foreach (var item in sortedNumbers)
        {
            Console.WriteLine(item);
        }
        Console.ReadLine();
    }       

产出:

代码语言:javascript
复制
4
4
4
4
1
1
2
3
5
6
7
8

编辑:如果您的列表中有零或负数,您的编号将按以下顺序排列:首先,完全匹配,然后升序。例如:{ -1, 0, 0, -12, 1, 2, 3, 4, 4, 5, 6, 7, 4, 8, 1, 4 }

结果如下:

代码语言:javascript
复制
4
4
4
4
-12
-1
0
0
1
1
2
3
5
6
7
8
票数 0
EN

Stack Overflow用户

发布于 2021-03-15 14:34:41

而不是numbers.OrderBy(x => x - 4 == 0),您需要使用OrderByDescending,因为true比false“更多”,而且您首先需要它们。您还想按其价值对其余部分进行排序:

代码语言:javascript
复制
var sortedNumbers = numbers.OrderByDescending(x => x == 4).ThenBy(x => x);

如果您不记得是否需要使用OrderByOrderByDescending,请使用:

代码语言:javascript
复制
var sortedNumbers = numbers.OrderBy(x => x == 4 ? 0 : 1).ThenBy(x => x);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66639749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档