对列表进行迭代,求和并将结果放入字典

本文关键字:结果 字典 求和 列表 迭代 | 更新日期: 2023-09-27 18:22:17

假设我有两个(可能更多)具有相同字段/属性的相同对象列表。每个列表表示相同的对象

项目:

HoursWorked
HoursRate

我想对所有列表中的每个字段进行迭代和求和(可以是2、3等),并将其存储在具有键值对的字典中。e.g HoursWorked:2 and HourseRate:6

目前,我只能对一个字段执行此操作(硬编码)。我想让它通用,这样我就可以用所有字段的Key/Value填充字典。

我已将我的词典定义为以下

public Dictionary<string, double> TotalCount { get; set; }

Linq查询:

Dictionary<string, double> totalCount = records
.GroupBy(x => records)
.ToDictionary(x => Convert.ToString("HoursWorked"), x => x.Where(y => y.HoursWorked != null).Sum(y => y.HoursWorked).Value);

有什么帮助吗?

样本数据

Input
    report = 
    { 
    [HoursWorked: 1.0, HoursRate:10], 
    [HoursWork:2.0, HoursRate:15]
    }
Expected Output
Dictioary = {Key:HoursWorked Value: 3.0,Key:HoursRate Value:25}

对列表进行迭代,求和并将结果放入字典

Dictionary<string, double> dictionary = new[] { "HoursWorked", "HoursRate" }
    .ToDictionary(k => k, v => collections
        .SelectMany(x => x)
        .Sum(y => (double)y.GetType().GetProperty(v).GetValue(y)));

其中"collections"是您的列表集合。显然完全不安全,很容易摔倒!

我认为,与使用反射相比,更好的模式是编写一个方法或接口,在给定字符串键的情况下返回正确的双值。

class someObject
    {
        public int workingHours { get; set; }
        public int hourRate { get; set; }
    }

您可以从所有列表中创建一个通用列表。

List<SomeObject> lst = new List<SomeObject>();
lst.AddRange(Oldlst1);
lst.AddRange(Oldlst2);

然后您可以根据小时费率进行分组。

var n = lst.GroupBy(x=>x.hourRate);

然后你可以创建一本字典。

var m=n.ToDictionary(x=>x.Key, x=>x.Sum(y=>y.workingHours));

在m中,您将得到hourRate,在值中您将得到工作时间的总和。