c#合并两个字典并在它们之间添加值

本文关键字:之间 添加 字典 合并 两个 | 更新日期: 2023-09-27 18:10:28

我正在学习c#,需要合并两个字典,这样我就可以在两个字典中添加值。

第一个字典是payePlusNssf,它保存每个键的值(键表示员工ID)。到目前为止,我有员工1、2、3、4和5

Dictionary<int, decimal> payePlusNssf = new Dictionary<int, decimal>();
paye.ToList().ForEach(x =>
{
    var deductNSSF = x.Value + nssfAmount;
    payePlusNssf.Add(x.Key, deductNSSF);
});

第二个字典是nhifRatesDictionary,它保存了第一个字典中每个员工的每个值的加成率。

Dictionary<int, IEnumerable<NHIFRates>> nhifRatesDictionary =
   new Dictionary<int, IEnumerable<NHIFRates>>();
basicPayDictionary.ToList().ForEach(x =>
{
    List<NHIFRates> nhifValueList = new List<NHIFRates>();
    // Using Employee basic pay
    decimal basicPay = x.Value;
    bool foundflag = false;
    foreach (var item in nhifBracketList)
    {
        if (basicPay >= item.Min && basicPay <= item.Max)
        {
            nhifValueList.Add(new NHIFRates { Rate = item.Rate });
            foundflag = true;
            break;
        }                       
    }
    if (!foundflag)
    {
        nhifValueList.Add(new NHIFRates { Rate = 0m });
    }
    nhifRatesDictionary.Add(x.Key, nhifValueList);
});
struct NHIFRates
{
    public decimal Rate { get; set; }
}

总而言之,我需要在合并和添加后:

Dict 1          Dict 2          Result Dict 3
key  value      key  rate       key  value
1     500       1     80        1    580
2    1000       2     100       2   1100
3    2000       3     220       3   2220
4     800       4     300       4   1100
5    1000       5     100       5   1100

我如何做到这一点?我在这个网站上看到了过去类似的问题,但对我来说不是很有帮助。

c#合并两个字典并在它们之间添加值

未测试,但请尝试:

payePlusNssf.ToDictionary(
            v => v.Key, 
            v => v.Value + nhifRatesDictionary[v.Key].Sum(nhifr => nhifr.Rate)
                         );

这假设由于nhifRatesDictionary的值是IEnumreable,您想要对枚举中的所有值求和。如果IEnumerable为空,这也应该工作。如果您知道每个键只有一个值,那么您可以使用:

payePlusNssf.ToDictionary(
            v => v.Key, 
            v => v.Value + nhifRatesDictionary[v.Key].Single(nhifr => nhifr.Rate)
                         );

一个简单的for循环怎么样?

Dictionary<int,decimal> d3 = new Dictionary<int,decimal>();
for (int i = 1,i<=payePlusNssf.Count,i++)
{
    d3.Add (i,payePlusNssf[i]+((nhifRatesDictionary[i])[0]).Rate);
}

如果ID号不能保证这么简单,你可以使用

foreach (var x in payePlusNssf)
{
    d3.Add(x.Key,x.Value+ ((nhifRatesDictionary[x.Key])[0]).Rate);
}

或者完全不同,不要保持三个保证具有相同键的独立字典,并创建一个像

这样的雇员类
class Employee
{
    public decimal payePlusNssf;
    public decimal nhifRate;
    public decimal Sum
    {
        get { return payePlusNssf + nhifRate ;}
    }
}

和有一个字典的一切-节省你的问题,保持所有的字典更新