Я думаю, что здесь стоит рассмотреть более крупную проблему: что вы будете делать, если данные не соответствуют вашим требованиям (последовательные, без пробелов)?
Если вы все еще собираетесь обрабатывать данные , то вам, вероятно, стоит потратить время на то, чтобы сделать вашу систему более устойчивой к пробелам или пропущенным записям в данных.
** Если вам нужно обработать данные и они должны быть чистыми , вам следует поработать с поставщиком, чтобы убедиться, что он отправляет вам корректные данные.
Если вы собираетесь пропустить обработку и сообщить об ошибке , тогда утверждение предусловия отсутствия пропусков может быть подходящим способом. В 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} вместо этого?