我有以下代码。请帮助我得到我想要的输出。我有一个数字列表,然后我有一个输入值,它是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
您需要使用OrderBy(x=>x-4==0)
,而不是OrderByDescending
,因为true比false“更多”,您首先需要它们。您还希望按其值对其余部分进行排序:
var sortedNumbers = numbers.OrderByDescending(x => x == 4).ThenBy(x => x);
如果您不记得是否需要使用OrderBy
或OrderByDescending
,请使用:
numbers.OrderBy(x => x == 4 ? 0 : 1)
您可以通过在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