首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何有效地从数字列表中提取一个数字到0

如何有效地从数字列表中提取一个数字到0
EN

Stack Overflow用户
提问于 2015-12-11 17:45:44
回答 1查看 45关注 0票数 1

我有一个PTO对象的列表,它有两个属性AllowedHours和TakenHours。我需要从累积银行中减去PTO,直到它们达到0,然后移到下一家银行。

这段代码可以工作,但看上去没有什么更有效的方法吗?也许是通过linq做这件事的方法?

代码语言:javascript
运行
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-11 18:37:57

我不认为这是Linq候选人。实际上,(从性能角度看)您的代码的唯一低效部分是循环中的employeeAccruals.First(...。普通的for循环将是最快的,但我建议以下是最平衡的解决方案

代码语言:javascript
运行
复制
foreach (var accrualBank in employeeAccruals)
{
    var takeHours = Math.Min(requestedHours, accrualBank.AllowedHours - accrualBank.TakenHours);
    accrualBank.TakenHours += takeHours;
    requestedHours -= takeHours;
    if (requestedHours == 0) break;
}   
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34229498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档