我有一个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进行排序,而不是根据值本身进行排序(“升序”部分)
falsetrue之前订购,因此您需要调换条件


这是一个很好的示例:

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/

10-11 02:02