2012-08-23 156 views
3

我在C#中有2個字典(鍵值對對象)。我想詞典可以比較B和做以下對於那些在兩個字典任何鍵:
1.在字典中乙
2.值替換在字典中的值從字典B拆下匹配的密鑰用鍵值對(B)中的匹配鍵的值替換鍵值對(A)的值?

一個例子是如下:

初始字典:

A={" Key1:value1 "," Key2:value2 "} 
B={" Key3:bla "," key1:hello "," Key4:bla "," Key2:world "} 

之後:

A={" Key1:hello "," Key2:world "} 
B={" Key3:bla "," Key4:bla "} 

我想知道做到這一點的最佳方式,我相信這可以在LINQ中實現,但我仍然只是一個初學者,任何幫助,非常感謝。

回答

3

不知道從哪裏阿尼的答案去了,但這裏有一個類似的解決方案:

foreach (var k in A.Keys.ToList()) 
{ 
    if (B.ContainsKey(k)) 
    { 
     A[k] = B[k]; 
     B.Remove(k); 
    } 
} 

編輯它看起來像原來的代碼引發InvalidOperationException通過foreach環去的時候,以爲集合被修改。詳細信息請參見this question。需要ToList()

2

這裏的另一個選項是稍稍更加緊湊:

var keys = dictionaryA.Keys.Where(x => dictionaryB.Keys.Contains(x)).ToArray(); 
    foreach(var key in keys) 
    { 
     dictionaryA[key] = dictionaryB[key]; 
     dictionaryB.Remove(key); 
    }