Получить список дат, отвечающих правилам - PullRequest
0 голосов
/ 05 октября 2019

У меня есть список дат как:

  • 21/12/2019
  • 22/12/2019
  • 22/12/2019
  • 24/12/2019
  • 26/12/2019
  • 26/12/2019
  • 27/12/2019

У меня есть модель правила, определенная как:

public class Timing
{
    public int PeriodNbMinutes { get; set; }
    public int NbTimes { get; set; }
    public bool IsConsecutive { get; set; }
    public int Multiplicity { get; set; }
}

Теперь у меня есть правило: Я хочу найти все даты, где:

Даты, которые появляются 3 раза в2 дня и два раза

Итак, я должен получить две группы (я не хочу повторно использовать даты уже в группе):

Первый

1-й: 21/12/2019 - 22/12/2019 - 22/12/2019

Второй

2-е: 26/12/2019 - 26/12/2019- 27/12/2019

Тогда у меня есть такое правило:

this.PeriodMinutes = 2680;
this.NbTimes = 2;
this.Multiplicity = 2;
this.IsConsecutive=true;

Отредактировано

    public int PeriodNbMinutes { get; set; }
    public int NbTimes { get; set; }
    public bool IsConsecutive { get; set; }
    public int Multiplicity { get; set; }

    internal bool Test(List<DateTime> metrics)
    {
        bool res = false;
        int times = 0;
        int multiple=0;
        TimeSpan ts = new TimeSpan(0, PeriodNbMinutes, 0);

        for (int i = 0; i < metrics.Count; i++)
        {
            var dates = metrics.Skip(i);

            var selectedDts = metrics.Zip(dates, (dtFirst, dtNext) => (dtNext - dtFirst).Ticks < ts.Ticks);

            if (selectedDts.Count() > 0)
            {
                res = true;
                times++;

                if (times == Multiplicity)
                {
                    multiple++;
                    if (multiple == Multiplicity)
                        return true;

                    // Consecutive???
                }
                else res = false;
            }
            else
            {
                res = false;
                times = 0;
            }
        }
        return res;

    }

Как я могу найти эти группы с Linq? Я пробовал использовать TimeSpan, но не могу заставить его работать.

Кроме того, в двух выбранных группах мне нужно знать, последовательны они или нет.

Я пробовал много разных решений. но ничего хорошего. Как я могу сделать это просто?

Спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...