提问者:小点点

按与输入的差值计算的C#软数字


我有以下代码。请帮助我得到我想要的输出。我有一个数字列表,然后我有一个输入值,它是4。我想我的列表将排序的基础上0的差异,然后其余的将是升序。例如,在我的列表中有4S。我的输入是4,所以我想对那些数字进行排序,其中number item-input value=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

共2个答案

匿名用户

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

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

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

numbers.OrderBy(x => x == 4 ? 0 : 1)

匿名用户

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

    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