У меня есть коллекция DateTime
объектов. Мне нужно «разобрать» подколлекции из этого исходного списка, чтобы захватить связанные элементы на основе повторения. Поэтому мне нужно, чтобы принять эту единственную оригинальную коллекцию:Ищете алгоритм C# для захвата повторяющихся элементов из коллекции объектов DateTime (факторинг как по дате, так и по времени)?
var collectionOfDateTime = GetDateTimeCollection();
и перевести это в список DateTime
коллекций, где каждая коллекция включает в себя набор дат из первого списка, после конкретного шаблона рецидива.
В моих примерах ниже я не включаю время, но в реальном требовании эти элементы имеют для них элементы даты и времени. Так, например, Даты должны быть на 7 дней друг от друга, но также быть одинаковыми (один раз 3 февраля в 11 утра не соответствует 10-м февраля в 3 вечера, но он соответствует 10 февраля в 11:00)
Например , позволяет сказать, что мой рецидив картина «Weekly» (в других случаях это может быть «Ежемесячно») и моя коллекция дата выглядит следующим образом:
var date1 = DateTime.Today.AddHours(8);
var date2 = DateTime.Today.AddWeeks(1).AddHours(8);
var date3 = DateTime.Today.AddDays(3);
var date4 = DateTime.Today.AddWeeks(8).AddHours(6);
var collectionOfDateTime = new List<DateTime>() { date1, date2, date3, date4 };
Я хотел бы функцию (назовем ее StripOutSubCollections()
), чтобы пройти в collectionOfDateTime
и тот факт, что его «Еженедельно» и возвращают одну коллекцию, которая включает в себя date1
, date2
(так как все они являются частью одного и того же недельного слота). Примечание date3 не не подходит и date4 также не подходит, потому что часы не совпадают с другими
Для другого примера, чтобы помочь доказать из требования, если вход в оригинальной коллекции было это:
var date1 = DateTime.Today;
var date2 = DateTime.Today.AddWeeks(1);
var date3 = DateTime.Today.AddDays(3);
var date4 = DateTime.Today.AddWeeks(8);
var date5 = DateTime.Today.AddDays(3).AddWeeks(2);
var collectionOfDateTime = new List<DateTime>() { date1, date2, date3, date4, date5 };
Я хотел бы эту функцию, чтобы вернуть 2 списков (один список с date1
, date2
и date4
) и еще один список с date3
и date5
.
Сообщите мне, если мне нужно больше примеров, чтобы сформулировать требования? Обратите внимание, что возможно, что одна из дат может попадать в несколько выходных списков, что прекрасно.
Я могу конвертировать еженедельно в число 7 и прокручивать каждый элемент, начиная с первого элемента до конца, затем второго элемента до конца, затем третьего элемента и т. Д., Но хотел бы посмотреть, более изящный способ
В вашей первой Например, не 'date3', не' date2', нечетный человек? – HABO
@Brian - я обновил свой нынешний подход грубой силы, который, кажется, работает нормально, но чувствует, что может быть более элегантный способ – leora
@HABO - да, это была опечатка, исправленная – leora