2012-11-16 3 views
1

코드 :두 사전에이 연합이 작동하지 않는 이유는 무엇입니까?

Dictionary<string, IList<PuntoMappa>> first = new Dictionary<string, IList<PuntoMappa>>(); 
    Dictionary<string, IList<PuntoMappa>> second = new Dictionary<string, IList<PuntoMappa>>(); 
    second = second.Union(first); 

내가 명시 적 캐스트가없는 것 같다?

+3

뭔가를해야합니다. 오류가 보이십니까? 예상치 못한 결과가 보이십니까? –

답변

2

은 "연합"는 IEnumerable을 반환 : 대신 당신이 당신이 사전에 노동 조합에 일치하는 키를 사용하여 목록을 원하는 경우에 당신은 Join 사용할 수 있습니다. 새 사전 생성 -

var newEnumerable = second.Union(first); 

또는 : - 당신이 IEnumerable을 원하는 경우

당신은 새 변수를 필요 IEnumerable<KeyValuePair<string, IList<PuntoMappa>>들로

second = second.Union(first).ToDictionary(kv => kv.Key, kv => kv.Value); 
4

secondDictionary<string, IList<PuntoMappa>>이고 Union의 반환 유형은 IEnumerable<KeyValuePair<string, IList<PuntoMappa>>>입니다. 이를 다시 사전으로 변환해야합니다.

second = second.Union(first).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); 

중복 된 키가있는 경우 주석이 지적했듯이이 기능이 작동하지 않을 수 있습니다. - 아니 사전

second = first.Join(second, kvp => kvp.Key, kvp => kvp.Key, (pair1, pair2) => new { Name = pair1.Key, PuntoMappas = pair1.Value.Union(pair2.Value) }) 
    .ToDictionary(p => p.Name, p => p.PuntoMappas.ToList()); 
+1

어떻게해야합니까? '.ToDictionary (문자열, IList );'doesnt works ... – markzzz

0

Union 당신이 사전보고를 - 그것은 문자 그대로 오직 "나는 이미이 KVP를 반환했는지, 그렇지 않다면 반환하지 않겠습니까? 그렇지 않으면", 일치하는 키의 목록을 병합하는 데 익숙하지 않은 것을 시도하지 마십시오.

은 당신이 찾고있는 것을 저는 믿습니다 실현하려, 당신은 당신이 당신의 문제가 무엇인지 설명하지 않는

first.Concat(second) 
    .GroupBy(kvp => kvp.Key) 
    .ToDictionary(
     g => g.Key, 
     g => g.SelectMany(kvp => kvp.Value).ToList()); 
관련 문제