如何检查一系列值是否正确排序?

时间:2011-02-07 14:45:06

标签: c# .net comparison syntactic-sugar

我有许多Action个对象,其属性为long Timestamp。我想做这样的事情:

Assert.IsTrue(a1.Timestamp < a2.Timestamp < a3.Timestamp < ... < an.Timestamp);

不幸的是,这种语法是非法的。是否有内置方式或扩展\ LINQ \无论如何执行此操作?

请注意,它是单元测试类的目标,所以要发疯。我不关心性能,可读性等。

4 个答案:

答案 0 :(得分:6)

private static bool isValid(params Action[] actions)
{
  for (int i = 1; i < actions.Length; i++)
    if (actions[i-1].TimeStamp >= actions[i].TimeStamp)
      return false;
  return true;
}

Assert.IsTrue(isValid(a1,a2,...,an));

答案 1 :(得分:4)

怎么样:

Action[] actions = { a1, a2, a3, ... an };
Assert.IsTrue
  (actions.Skip(1)
          .Zip(action, (next, prev) => prev.Timestamp < next.Timestamp)
          .All(b => b));

答案 2 :(得分:1)

public bool InOrder(params long[] data)
{
  bool output = true;

  for (int i = 0; i <= data.Count-1;i++)
  {
    output &= data[i] < data[i + 1];
  }
  return output;
}

我使用了for循环,因为这保证了迭代的顺序,foreach循环不会做什么。

答案 3 :(得分:1)

假设actions是List或数组:

actions.Skip(1).Where((x,index)=>x.Timespan > actions[i].Timespan).All(x=>x)