Добавление недостающих дней в коллекцию - C#
Формулировка задачи:
Доброго времени суток.
У меня имеется коллекция DateTime.
В коллекции содержатся объекты, у которых поле DayOfWeek может быть одинаково.
Также в коллекции отсутствуют некоторые элементы, у которых DayOfWeek отличается от других элементов.
Проще говоря - у меня есть коллекция дат, раскиданных по одной неделе, но некоторых дат там не имеется - некоторых конкретных дней (например нету понедельника или среды).
Есть ли вариант дополнить коллекцию недостающими элементами, дата которых будет вычислена из уже имеющихся элементов?
Т.е. если у нас есть вторник, то дата понедельника может быть вычислена через
.AddDays(-1);.
Не могли бы вы подсказать универсальный алгоритм?
Спасибо. Решение задачи: «Добавление недостающих дней в коллекцию»
textual
Листинг программы
List<iDay> kkk(List<iDay> inn)
{
//if (inn.Count == 0) return inn;
DateTime min=DateTime.MaxValue, max=DateTime.MinValue;
for (int i=0; i<inn.Count; i++)
{
if (inn[i].Date > max) max = inn[i].Date;
else if (inn[i].Date < min) min = inn[i].Date;
}
if (min.DayOfWeek != DayOfWeek.Monday)
min = min.AddDays(- ((int)min.DayOfWeek == 0 ? 7 : (int)min.DayOfWeek)+1);
if (max.DayOfWeek != DayOfWeek.Saturday || max.DayOfWeek != DayOfWeek.Sunday)
max = max.AddDays((int)max.DayOfWeek == 0 ? 0 : 7-(int)max.DayOfWeek);
int days = (max.Date - min.Date).Days;
var missingDays = Enumerable.Range(1, days).Select(n => min.Date.AddDays(n)).Except(inn.Select(x => x.Date.Date));
inn.AddRange(missingDays.Select(d => new iDay(d)));
return inn;
}