You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Linq对时间条目列表分组求和并计算耗时占比?

实现方法

Linq本身没有内置专门计算分组占比的语法,你可以通过提前计算全量集合总耗时的方式实现,该方案仅需遍历一次集合计算总和,性能最优,不会产生重复计算的开销:

// 提前计算所有时间条目的总耗时
float totalHours = timeEntries.Sum(entry => entry.HoursSpent);

var activitiesWithSpentHours = timeEntries
    .GroupBy(timeEntry => timeEntry.ActivityName)
    .Select(activityGroup => 
    {
        float groupHours = activityGroup.Sum(timeEntry => timeEntry.HoursSpent);
        return new
        {
            Activity = activityGroup.Key,
            HoursSpent = groupHours,
            // 计算百分比,第二个参数可按需调整保留的小数位数,不需要保留小数传0即可
            Percentage = totalHours == 0 ? 0 : Math.Round(groupHours / totalHours * 100, 2)
        };
    });

注意事项

  • 代码中增加了总耗时为0的判断,避免出现除零异常
  • 你原有示例代码中HoursSpent赋值行末尾缺少逗号,调整代码时请补充该语法符号
  • 不要在Select的匿名类内部直接调用timeEntries.Sum()计算总耗时,否则每处理一个分组都会遍历一次全量集合,时间复杂度会上升到O(n²),集合数据量大时性能损耗非常明显

内容的提问来源于stack exchange,提问作者user13755987

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 06:24:08