我正在学习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
我如何实现这一目标?我查看过这个网站上过去的类似问题,但对我没有太大帮助。
答案 0 :(得分:3)
未经测试但请尝试:
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)
);
答案 1 :(得分:1)
简单的循环怎么样?
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);
}
如果不保证身份证号码如此简单,您可以使用
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 ;}
}
}
并且有一个包含所有内容的词典 - 为您保存字典全部更新的问题。