C# 软编号与输入的差异

C# Soft Number By Difference From Input

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

中的数字进行排序

C#

    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();
    }

输出

1
2
3
5
6
7
8
1
4
4
4
4

期望输出

4
4
4
4
1
1
2
3
5
6
7
8

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

var sortedNumbers = numbers.OrderByDescending(x => x == 4).ThenBy(x => x);

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

var sortedNumbers = numbers.OrderBy(x => x == 4 ? 0 : 1).ThenBy(x => x);

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

    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();
    }       

输出:

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 }

结果如下:

4
4
4
4
-12
-1
0
0
1
1
2
3
5
6
7
8