我有一个int数组,我想从某个值开始按升序对这些值进行排序,我们将其称为startValue
。但是,我想保留所有值,并且那些大于startValue
的值应出现在列表中的最大值之后。
用一个例子可能更容易解释...
int[] values = new int[] { 1, 2, 4, 6, 9 };
int startValue = 4;
int[] orderedValues = { 4, 6, 9, 1, 2 }; // desired result
我该如何实现?我以为这样可以解决问题,但新
orderedValues
的顺序与原始值相同。int[] orderedValues = values.OrderBy( v => v >= startValue ).ToArray();
最佳答案
您当前的代码有两个问题:
您仅根据值是否至少为startValue
进行排序,而不是根据值本身进行排序(“升序”部分)false
在true
之前订购,因此您需要调换条件
这是一个很好的示例:
using System;
using System.Linq;
class Test
{
static void Main()
{
int[] values = new int[] { 1, 2, 4, 6, 9 };
int startValue = 4;
int[] orderedValues = values
.OrderBy(v => v < startValue) // Note reversed comparison
.ThenBy(v => v) // Order by value within each segment
.ToArray();
Console.WriteLine(string.Join(", ", orderedValues));
}
}
关于c# - C#Linq-按ASC顺序从VALUE开始,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55011012/