我认为这是值得解决更大的问题在这里:如果数据不符合您的要求(顺序,没有差距),你会怎么做?
如果你还是会来处理数据,那么你或许应该投资自己的时间使你的系统更有弹性的间隙或丢失的数据条目。
* *如果你需要处理的数据,并一定要干净,你应该与供应商合作,以确保他们给你形成良好的数据。
如果您要跳过处理并报告错误,那么声明无间隙的先决条件可能是一条可行的路。在C#中有许多不同的事情可以做:
- 如果数据进行排序,并没有DUP的,只是检查是否
LastValue == FirstValue + ArraySize - 1
。
- 如果数据没有排序,但DUP免费,只是排序它,做以上。
- 如果数据没有排序,有dups和你真的想检测差距,我会使用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}呢?
如果你总是得到一个顺序数组 - 为什么他们只是传递一个数字给你来生成数组在你身边? – zerkms 2011-03-24 00:24:26
你需要它是连续的还是连续的? – eulerfx 2011-03-24 00:25:35
是否有可能只获取起始值和最终值(或元素数量)并自己创建数组? 'Enumerable.Range(开始,计数)' – 2011-03-24 00:36:57