Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#合并两个字典并在它们之间添加值_C#_Dictionary - Fatal编程技术网

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

C#合并两个字典并在它们之间添加值,c#,dictionary,C#,Dictionary,我正在学习C#,需要合并两个字典,以便添加在这两个字典中找到的值 第一个字典是PayplusNSF,它为每个键保存一个值(键表示员工ID)。到目前为止,我有1、2、3、4和5名员工 Dictionary<int, decimal> payePlusNssf = new Dictionary<int, decimal>(); paye.ToList().ForEach(x => { var deductNSSF = x.Value + nssfAmount;

我正在学习C#,需要合并两个字典,以便添加在这两个字典中找到的值

第一个字典是PayplusNSF,它为每个键保存一个值(键表示员工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);
});
我如何做到这一点?我在该网站上查看了过去的类似问题,但没有对我有多大帮助。

未测试,但请尝试:

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)
                         );

简单的自行车怎么样

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);
}
或者完全不同,不要保留三个保证具有相同键的单独词典,并创建一个类似employee的类

class Employee
{
    public decimal payePlusNssf;
    public decimal nhifRate;
    public decimal Sum
    {
        get { return payePlusNssf + nhifRate ;}
    }
}

并且拥有一本包含所有内容的词典-为您省去了所有更新词典的麻烦。

您的意思是要为每个员工添加第一本词典中的值和第二本词典中的所有费率?是否保证第一本词典中的每个员工也都在第二本词典中?我一定需要。我对你的代码有点困惑。你为什么用字典来做这个?好的,那么,你的第二个字典,可以简化为一个字典,如果你使用它,为每个第一个字典查找值,如果在第二个字典中查找值,做这个工作,将项添加到新字典中,否则只需将其作为无更改添加即可required@svick第一本词典中的每个员工也都会在第二本词典中,即完全匹配。我需要将在dict2中计算的每个速率添加到dict1中的相应值中。
nhifRatesDictionary
的值是一个
IEnumerable
值没有直接的
rate
属性。字典中的键是一个id。你不能期望它们是连续的。如果没有,您的代码将无法工作。@svick这就是foreach版本的来源。@Variant My bad。但在我看来,里面总是只有一个项目,这使得所有的IEnumerable都毫无用处。我更新了它。
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 ;}
    }
}