Перебирая список объектов, когда значения объектов равны 50, что-то делают со всем до и после 50 - PullRequest
0 голосов
/ 09 апреля 2020

Извините, что название не может быть объяснено чем-то еще!

Итак, у меня есть список часов, которые представляют чьи-то рабочие часы.

За эти часы я тренируюсь, сколько часы отработаны до определенного времени каждый день, например, до 22:00 и сколько после.

Мои свойства класса ниже.

Мне нужно сделать l oop через список эти часы и обработайте их.

Сложность состоит в том, что, когда вы работаете более 50 часов, вам платят по разным ставкам, поэтому все менее 50 по одной ставке и все более 50 по более высокой ставке.

Так что мне нужно выполнить l oop и выяснить точную точку, в которой общее количество часов достигло 50, а затем узнать, сколько часов из этих 50 было «до отключения» и сколько было «после отключения». Затем сделайте то же самое для часов, отработанных после 50.

Приведенная ниже опора для часов будет состоять из (HoursBeforeCuttOff + HoursAfterCutOff)

Не могу придумать, как этого добиться, любые идеи будут приветствоваться

public double Hours { get; set; }
public double HoursBeforeCuttOff { get; set; }
public double HoursAfterCutOff { get; set; }

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Если я правильно понял, это должно сработать.

double hoursSum = 0;
double hoursSumBeforeCutoffUnder50 = 0;
double hoursSumAfterCutoffUnder50 = 0;
double hoursSumBeforeCutoffOver50 = 0;
double hoursSumAfterCutoffOver50 = 0;
foreach(var h in listOfHours)
{
  if(hoursSum >= 50)
  {
    // we're over 50, just add the hours before and after cutoff to the sums
    // hoursSum can be ignored from here on, it's no longer used.
    hoursSumBeforeCutoffOver50 += h.HoursBeforeCutoff;
    hoursSumAfterCutoffOver50 += h.HoursAfterCutoff;
  }
  else if(hoursSum + h.Hours > 50)
  {
    // this entry will pass the line of 50 hours. The hours are added depending of where the line is crossed
    if(hoursSum + h.HoursBeforeCutoff > 50)
    {
      hoursSumBeforeCutoffUnder50 += 50 - hoursSum;
      hoursSumBeforeCutoffOver50 += hoursSum + h.HoursBeforeCutoff - 50;
    }
    else { hoursSumBeforeCutoffOver50 += h.HoursBeforeCutoff; }

    hoursSum += h.HoursBeforeCutoff;

    if(hoursSum < 50)
    {
      hoursSumAfterCutoffUnder50 += 50 - hoursSum;
      hoursSumAfterCutoffOver50 += hoursSum + h.HoursAfterCutoff - 50;
    }
    else { hoursSumAfterCutoffOver50 += h.HoursAfterCutoff; }

    hoursSum += h.HoursAfterCutoff;
  }
  else{
    // the 50 hours are not yet reached, just add the hours
    hoursSum += h.Hours;
    hoursSumBeforeCutoffUnder50 += h.HoursBeforeCutoff;
    hoursSumAfterCutoffUnder50 += h.HoursAfterCutoff;
  }
}
0 голосов
/ 09 апреля 2020

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

var hoursBeforeCutOff = listOfHours.Where(h => h < 10:00pm).Take(50).ToList();
var hoursAfterCutOff = listOfHours.Where(h => h < 10:00pm).Skip(50).ToList();

Если вам нужно что-то другое, вам следует соответствующим образом обновить вопрос, включая вашу модель данных. Список часов означает что-то свое в каждом домене. Мы не можем угадать, как выглядит ваш домен.

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