Linq表达式,用于验证列表是按升序还是降序排序

Mik*_*ikk 8 c# linq

我有一个IEnumerable<DateTime>var,我需要验证它是按升序还是降序排序.

我可以使用for循环来做到这一点,但有没有办法使用LINQ表达式?

Use*_*678 9

var orderedByAsc = input.OrderBy(d => d);
if (input.SequenceEqual(orderedByAsc))
{
    Console.WriteLine("Ordered by Asc");
    return;
}

var orderedByDsc = input.OrderByDescending(d => d);
if (input.SequenceEqual(orderedByDsc))
{
    Console.WriteLine("Ordered by Dsc");
    return;
}

Console.WriteLine("not sorted");
Run Code Online (Sandbox Code Playgroud)

  • 这样做的问题是,检查它的排序成本是否高于首先排序的成本. (2认同)
  • @Daniel 确实 - 你可以,但上面的答案首先进行排序(`O(n log n)`)然后比较(`O(n)`),这就是为什么我指出它严格比排序更糟糕第一名。话虽如此,“O(n)”LINQ 解决方案并不容易阅读(请参阅我的回答),因此我个人根本不会在这里使用 LINQ。 (2认同)

dec*_*cPL 6

上升:

myEnumerable.Zip(myEnumerable.Skip(1), (curr, next) => curr <= next).All(x => x);
Run Code Online (Sandbox Code Playgroud)

降:

myEnumerable.Zip(myEnumerable.Skip(1), (curr, next) => curr >= next).All(x => x);
Run Code Online (Sandbox Code Playgroud)

但是使用循环,LINQ并不是一切的神奇解决方案.