#c# #algorithm #linq #datetime #overlap
Вопрос:
У меня есть эти интервалы времени и времени
internal class DatetimeInterval
{
public DateTime From { get; }
public DateTime To { get; }
public DatetimeInterval(DateTime from, DateTime to)
{
From = from;
To = to;
}
}
для которых я использую для хранения старых DatetimeInterval
и новых DatetimeInterval
List<DatetimeInterval>()
Учитывая набор новых DatetimeInterval
букв List<List<DatetimeInterval>>()
, я хотел бы для каждого набора определить набор предыдущих DatetimeInterval
букв, которые перекрываются с новыми DatetimeInterval
буквами.
Как мне это сделать?
Я знаю, что перекрытие можно обнаружить, сравнив два значения DatetimeIntevals, выполнив do
if((start0A <= end0B) amp;amp; (end0A >= start0B))
{
Console.WriteLine("Overlap");
}
но это касается только одного случая.
Есть ли какой-нибудь способ, которым я могу связать это с
List<(List<DatetimeInterval>, List<DatetimeInterval>)> OverlappingTimeStamps = newDateTimeChunks.FindOverlapping(oldDateTimes)
Помимо выполнения этого в двойном цикле for и проверки каждого отдельного человека?
есть ли какой-нибудь разумный способ найти перекрывающиеся интервалы времени между двумя списками?
Моя нынешняя попытка состоит в том, чтобы сделать это вот так, но она не кажется такой эффективной..
private static List<(IEnumerable<DatetimeInterval>, IEnumerable<DatetimeInterval>)> FindOverlappingPreviousRegistrations(
IEnumerable<IEnumerable<DatetimeInterval>> chunkedRegistrations,
IEnumerable<DatetimeInterval> oldRegistrations)
{
List<(IEnumerable<DatetimeInterval>, IEnumerable<DatetimeInterval>)> pairedOldAndNewRegistrations = new();
foreach (IEnumerable<DatetimeInterval> chunkedRegistration in chunkedRegistrations)
{
IEnumerable<DatetimeInterval> overLappingRegistrations = chunkedRegistration.Where(newRegistration =>
oldRegistrations.Any(oldRegistration =>
newRegistration.From <= oldRegistration.To amp;amp; oldRegistration.To >= newRegistration.From));
pairedOldAndNewRegistrations.Add((overLappingRegistrations, chunkedRegistration));
}
return pairedOldAndNewRegistrations;
}
Комментарии:
1. Я бы предложил, чтобы у него была
CompositeRange
кодовая камера, в которой есть все необходимые функции для работы с диапазонами, слиянием, исключением, пересечением и т. Д.2. Я не забыл о вас, но мой ответ по какой-то причине кажется неправильным (или, по крайней мере, хотя компаратор работает нормально, я по какой-то причине не могу заставить его работать с linq’s intersect). Вы можете увидеть, что я попробовал здесь: rextester.com/VCL36242