Мне нужно проверить, заполняют ли некоторые объекты в базе данных определенный диапазон, т. Е. 0-999.
Я использую C # и создал универсальный класс с использованием IComparable для проверки на пересечение.Это работает нормально, но мне нужно инвертировать и найти все пробелы, которые у меня есть в этом интервале.
Мои объекты базы данных имеют начальные и конечные свойства, которые являются целыми числами.Я могу найти, где есть пробелы, но мне нужно сгруппировать их, чтобы создать недостающие фрагменты.
foreach (var interval in intervals)
{
for (int i = 0; i <= 999; i++)
{
if (Range<int>.Intersects(interval,new Range<int>(i,i)))
continue;
else
doesNotIntersect.Add(i);
}
}
С этим кодом у меня есть симпатичный список «дыр».Сейчас я пытаюсь сгруппировать эти значения, но я считаю, что мое решение не оптимально и, конечно, не элегантно.
Я читал о BitArrays, но как они могут мне помочь?Я хотел бы, чтобы из списка диапазонов я мог найти пропуски в фиксированном диапазоне.Если мы говорим о строке, мне нужен в основном результат с фиксированными интервалами.
Я могу использовать только .NET для решения этой проблемы.У меня большой кусок промежуточного программного обеспечения, и этот процесс проверки будет происходить несколько раз в день, поэтому я предпочитаю не проходить через промежуточное программное обеспечение, а затем выполнять поиск данных.
Позвольте мне попытаться создать рисунок
Фиксированный диапазон, который необходимо заполнить
111111111
Диапазоны, которые предоставлены объектами
101100001
Диапазоны, которые необходимо заполнить
010011110
Это мой объект диапазона:
public class Range<T> where T : IComparable
{
public T Start { get; set; }
public T End { get; set; }
public Range(T start, T end)
{
Start = start;
End = end;
}
public static bool Intersects(Range<T> left,Range<T> right)
{
if (left.Start.CompareTo(right.Start) == 0)
return true;
if (left.Start.CompareTo(right.Start) > 0)
{
return left.Start.CompareTo(right.End) <= 0;
}
return right.Start.CompareTo(left.End) <= 0;
}
}
Мне нужно найти разрывы в начальных конечных точках вместо непрерывных интервалов.
Помощь