我认为在这里解决更大的问题是值得的: 如果数据不符合您的要求(顺序,没有间隙),您将怎么做?
如果您仍要处理数据,那么您可能应该投入时间使您的系统对数据中的空白或丢失条目更具弹性。
* *如果您需要处理数据并且它必须是干净的,您应该与供应商合作以确保他们向您发送格式正确的数据。
如果您要跳过处理并报告错误,那么断言没有间隙的前提条件可能是要走的路。在 C# 中,您可以做许多不同的事情:
- 如果数据已排序并且没有重复,只需检查
LastValue == FirstValue + ArraySize - 1
.
- 如果数据未排序但无重复,只需对其进行排序并执行上述操作。
- 如果数据没有排序,有重复并且你真的想检测差距,我会使用 LINQ。
List<int> gaps = Enumerable.Range(array.Min(), array.Length).Except(array).ToList();
或者更好(因为高端值可能超出范围):
int minVal = array.Min();
int maxVal = array.Max();
List<int> gaps = Enumerable.Range(minVal, maxVal-minVal+1).Except(array).ToList();
顺便说一句,传递一个密集的、无间隙的整数数组的整个概念对于两方之间的接口来说有点奇怪,除非有一些额外的数据与它们相关联。如果没有其他数据,为什么不直接发送范围 {min,max} 呢?