我有一个PTO对象的列表,它有两个属性AllowedHours和TakenHours。我需要从累积银行中减去PTO,直到它们达到0,然后移到下一家银行。
这段代码可以工作,但看上去没有什么更有效的方法吗?也许是通过linq做这件事的方法?
var requestedHours = requestDetail.Hours;
while (requestedHours > 0)
{
var accrualBank = employeeAccruals.First(e => (e.AllowedHours - e.TakenHours) > 0);
var hoursAvailable = accrualBank.AllowedHours - accrualBank.TakenHours;
if (hoursAvailable > requestedHours)
{
accrualBank.TakenHours += requestedHours;
requestedHours = 0;
}
else
{
accrualBank.TakenHours = accrualBank.AllowedHours;
requestedHours -= hoursAvailable;
}
}发布于 2015-12-11 18:37:57
我不认为这是Linq候选人。实际上,(从性能角度看)您的代码的唯一低效部分是循环中的employeeAccruals.First(...。普通的for循环将是最快的,但我建议以下是最平衡的解决方案
foreach (var accrualBank in employeeAccruals)
{
var takeHours = Math.Min(requestedHours, accrualBank.AllowedHours - accrualBank.TakenHours);
accrualBank.TakenHours += takeHours;
requestedHours -= takeHours;
if (requestedHours == 0) break;
} https://stackoverflow.com/questions/34229498
复制相似问题