Добавление недостающих дней в коллекцию - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы