2015-06-04 109 views
1

我有两个字典A的价值和B.比较两个库的密钥,以获得匹配的密钥

A - (a,b) (c,d) (e,f) 
B - (a,p) (c,q) (g,h) 

我希望能够使这将是如下一个新的字典ç -

C - (b,p) (d,q) 

有什么办法可以做到这一点?

这是我目前有:

var C= B.Where(d => A.ContainsKey(d.Key)).ToList(); 
+0

发表一些代码,以便我们可以帮助到您。 –

+0

foreach(A中的var kvp){if(B.ContainsKey(kvp.Key)){C.Add(kvp.Value,B [kvp.Key] .Value); }} – mclaassen

+0

var C = B.Where(d => A.ContainsKey(d.Key))。ToList(); –

回答

4

易于使用LINQ)

var query = 
    from x in dictionary1 
    join y in dictionary2 on x.Key equals y.Key 
    select new { Value1 = x.Value, Value2 = y.Value }; 

var newDict = query.ToDictionary(item => item.Value1, item => item.Value2); 

但是这不是最有效的方法,因为它并不需要字典的快速查找的优势。更快的方法是这样的:

var newDict = new Dictionary<string, string>(); // adjust the key and value types as needed 
foreach (var kvp in dictionary1) 
{ 
    string value2; 
    if (dictionary2.TryGetValue(kvp.Key, out value2)) 
    { 
     newDict.Add(kvp.Value, value2); 
    } 
} 
+0

太棒了!这工作。谢谢 –

+0

@SaurabhSahasrabuddhe,我更新了我的答案,提出了一个更有效的方法 –

+2

'join'在内部使用散列表,因此查找在那里也应该很快。 – Magnus