Алгоритм получения непересекающихся интервалов с другим интерваломC#

Место общения программистов C#
Ответить
Гость
 Алгоритм получения непересекающихся интервалов с другим интервалом

Сообщение Гость »


Допустим, у меня большой интервал

Код: Выделить всё

LargeInterval interval = new LargeInterval
{
StartPeriod = DateTime.Today,
EndPeriod = DateTime.Today.AddYears(1),
};
где

Код: Выделить всё

public class LargeInterval
{
public DateTime StartPeriod { get; set; }
public DateTime EndPeriod { get; set; }
}
и есть «меньшие» интервалы

Код: Выделить всё

public class SmallInterval
{
public string From{ get; set; }
public string To { get; set; }
}
Например,

Код: Выделить всё

SmallInterval s1 = new SmallInterval
{
From = "2024-05-01"
End = "2024-07-03"
}
и

Код: Выделить всё

SmallInterval s2 = new SmallInterval
{
From = "2024-08-01"
End = "2024-10-03"
}
Я хочу получить непересекающуюся часть между каждым

Код: Выделить всё

SmallInterval
с помощью

Код: Выделить всё

interval
типа

Код: Выделить всё

LargeInterval. Что-то вроде:
DateTime.Today until "2024-04-30"
и

Код: Выделить всё

"2024-07-04" until "2024-07-31"
и

Код: Выделить всё

"2024-10-04" until DateTime.Today.AddYears(1).AddDays(-1)
Я пробовал что-то вроде этого:

Код: Выделить всё

    DateTime startPeriod = interval.StartPeriod;
DateTime endPeriod = interval.EndPeriod;

IEnumerable existingPeriodsIntersectingTheNewPeriod = smallIntervals.Where(x => x.From = startPeriod).OrderBy(x => x.From);

foreach (var stsp in existingPeriodsIntersectingTheNewPeriod)
{

/// handling all scenarios
}


Источник: https://stackoverflow.com/questions/781 ... r-interval
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»