遍历对象列表,当对象值等于50时,对50之前和之后的所有内容都执行某项操作

问题描述 投票:0回答:2

对不起标题,不能解释任何其他问题!

所以我有一个代表某人工作时间的小时表。

[在这些小时内,我锻炼每天在特定时间之前工作了多少小时,例如晚上10:00之前,之后多少?

我的班级属性在下面。

我需要遍历这些小时的清单,并进行处理。

棘手的部分是,当您工作超过50个小时后,您将获得不同的报酬,因此,低于50岁的所有事物的报酬都是一种,而超过50岁的所有事物的报酬更高。

因此,我需要遍历并找出总时数达到50的确切时间,然后知道这50个小时中有多少小时是“截止前”,多少是“截止后”。然后在50点后的工作时间内执行相同操作。

下面的小时数道具将由((HoursBeforeCuttOff + HoursAfterCutOff)组成]

我想不到如何实现这一目标,欢迎提出任何想法

public double Hours { get; set; }
public double HoursBeforeCuttOff { get; set; }
public double HoursAfterCutOff { get; set; }
c# list loops class foreach
2个回答
0
投票

如果我理解正确,那应该可以。

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
投票

如何:我在代码中写小时,所以这变成了伪代码。我假设您总是工作一个小时,列表中的每个条目都代表一个小时。如果您需要其他内容,则应相应地更新问题,包括数据模型。

var hoursBeforeCutOff = listOfHours.Where(h => h < 10:00pm).Take(50).ToList();
var hoursAfterCutOff = listOfHours.Where(h => h < 10:00pm).Skip(50).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.