2011-10-03 3 views
2

나는 두 가지 사전을 병합해야하므로 두 가지 값을 모두 추가 할 수 있습니다.C# 2 개의 사전을 병합하고 그들 사이에 값을 추가

첫 번째 사전은 각 키의 값을 보유하는 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); 
}); 

제 2 회 사전은 첫 번째 사전 인당 각 값에 추가 할 요금을 보유하고 nhifRatesDictionary입니다.

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 

가 어떻게이를 않습니다 요약

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

나는 병합 및 추가 한 후이 필요하십니까? 나는이 사이트에서 비슷한 과거의 문제를 보았지만 나에게별로 도움이되지 못했다.

+0

각 직원에 대해 첫 번째 사전의 값과 두 번째 사전의 모든 요율을 추가 하시겠습니까? 첫 번째 사전에있는 모든 직원이 두 번째 사전에도 있음을 보장합니까? – svick

+1

나는 caffine이 필요합니다. 조금은 혼란 스러워요. 왜 이것을 사전에 사용하고 있습니까? 좋아요, 두 번째 사전은 사전 으로 단순화되었을 수 있습니다. 작업 한 경우 첫 번째 사전을 foreach하고 두 번째로 검색 할 값을 찾으면 작업을 수행하고 새 사전에 항목을 추가하십시오. 그렇지 않으면 다음과 같이 추가하십시오. 아무런 변화가 필요 없습니다. – BugFinder

+0

@svick 제 1 사전에있는 모든 직원은 둘째로, 즉 완벽하게 매칭됩니다. dict1에서 각각의 값에 더하기 위해 dict2에서 계산 된 각 비율을 추가해야합니다. –

답변

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

감사합니다. 이것은 도움이된다 –

1

주기는 간단합니까? ID 번호가이 단순하게 guranteed하지 않는 경우

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

과 같은 직원 클래스가 있으며 모든 사전이 하나씩있어 사전을 모두 업데이트하는 데 문제가 없습니다.

+0

'nhifRatesDictionary'의 값은'IEnumerable '입니다. 값에 직접'Rate' 속성이 없습니다. – Variant

+0

사전의 키는 id입니다. 당신은 그들이 계속 될 것이라고 기대할 수 없습니다. 그리고 그렇지 않은 경우 코드가 작동하지 않습니다. – svick

+0

@svick 이것이 foreach 버전이 나오는 곳입니다. – Lukas

관련 문제