【问题标题】:Fast Sequence checking in a List<int> [duplicate]List<int> 中的快速序列检查 [重复]
【发布时间】:2019-06-27 22:27:05
【问题描述】:

我正在寻找一种更快、更准确的方法来检查序列:

List<int> sequence = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7 … 41}



private bool IsSequential(List<int> sequence)
{

    int S = sequence[0];
    int T = sequence[sequence.Count- 1];

    List<int> Possible = Enumerable.Range(S, T).ToList();
    List<int> Except = sequence.Except(Possible).ToList();

    if (Except.Count == 0)
        return true;
    else
        return false;
}

如果列表相同,我的代码返回 1,我有某种计数问题?

我想知道是否有更好的方法来检查整数序列:200、201、202...等等。

某些序列可能乱序:200、210、203、204...我需要确定这个问题。

谢谢

【问题讨论】:

  • 如何定义“更好”?快点?更少的内存密集型?更容易编码?少写几行?
  • 202,201,200 是否也被认为是连续的?比如,我们需要确定方向吗?
  • @HimBromBeere - 也许是 Linq 中的 One-Liner,或者更简洁的代码实现,你会如何让它变得更好?
  • 或者,使用for 循环并将索引(可能添加初始值)与列表条目进行比较。如果它们不匹配,则不是顺序的。一定要测试是否有int.MaxValue 然后 int.MinValue

标签: c# list


【解决方案1】:

您可以尝试使用SequenceEqual

  List<int> sequence = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7 };
  bool isInSequence = sequence.SequenceEqual(Enumerable.Range(sequence[0], sequence.Count()));

【讨论】:

  • 你能解释一下为什么使用 'sequence.Count()' 而不是 'sequence[sequence.Count - 1]' 因为序列的最后一个数字是最后一个整数吗?跨度>
  • @RustyNail,它不是最后一个数字,它是生成序列时要生成的数字的计数。
猜你喜欢
  • 2020-08-16
  • 2019-02-11
  • 2020-03-05
  • 2020-03-06
  • 2015-11-21
  • 2013-07-29
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多