我有下面的代码。请帮我得到我想要的输出。我有一个数字列表,然后我有一个输入值,即4。我希望我的列表首先根据0差排序,然后其余的将上升。例如,在我的列表中有4s。我的输入是4,所以我想对数字条目输入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发布于 2021-03-15 14:38:36
您可以通过在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发布于 2021-03-15 14:34:41
而不是numbers.OrderBy(x => x - 4 == 0),您需要使用OrderByDescending,因为true比false“更多”,而且您首先需要它们。您还想按其价值对其余部分进行排序:
var sortedNumbers = numbers.OrderByDescending(x => x == 4).ThenBy(x => x);如果您不记得是否需要使用OrderBy或OrderByDescending,请使用:
var sortedNumbers = numbers.OrderBy(x => x == 4 ? 0 : 1).ThenBy(x => x);https://stackoverflow.com/questions/66639749
复制相似问题