Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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# - Fatal编程技术网

C# 按键比较两个字典以获得匹配键的值

C# 按键比较两个字典以获得匹配键的值,c#,C#,我有两本字典A和B A - (a,b) (c,d) (e,f) B - (a,p) (c,q) (g,h) 我想能够制作一本新的字典C,如下所示- C - (b,p) (d,q) 我有什么办法可以做到这一点吗 这就是我目前拥有的: var C= B.Where(d => A.ContainsKey(d.Key)).ToList(); 与Linq轻松相处;) 然而,这不是最有效的方法,因为它没有利用字典的快速查找。更快的方法是这样的: var newDict = new Diction

我有两本字典A和B

A - (a,b) (c,d) (e,f)
B - (a,p) (c,q) (g,h)
我想能够制作一本新的字典C,如下所示-

C - (b,p) (d,q)
我有什么办法可以做到这一点吗

这就是我目前拥有的:

var C= B.Where(d => A.ContainsKey(d.Key)).ToList();
与Linq轻松相处;)

然而,这不是最有效的方法,因为它没有利用字典的快速查找。更快的方法是这样的:

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);
    }
}
var newDict=newdictionary();//根据需要调整键和值类型
foreach(字典1中的var kvp)
{
字符串值2;
if(字典2.TryGetValue(kvp.Key,输出值2))
{
newDict.Add(kvp.Value,value2);
}
}
轻松使用Linq;)

然而,这不是最有效的方法,因为它没有利用字典的快速查找。更快的方法是这样的:

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);
    }
}
var newDict=newdictionary();//根据需要调整键和值类型
foreach(字典1中的var kvp)
{
字符串值2;
if(字典2.TryGetValue(kvp.Key,输出值2))
{
newDict.Add(kvp.Value,value2);
}
}

发布一些代码,以便我们可以帮助您.foreach(A中的var kvp){if(B.ContainsKey(kvp.Key)){C.Add(kvp.Value,B[kvp.Key].Value);}var C=B.Where(d=>A.ContainsKey(d.Key)).ToList()@mclaassen这似乎是正确的-你有错误吗?@DStanley实际上没有运行它,只是在我的脑海中想出了它。发布一些代码以便我们可以帮助你。foreach(A中的var kvp){if(B.ContainsKey(kvp.Key)){C.Add(kvp.Value,B[kvp.Key].Value);}}var C=B.Where(d=>A.ContainsKey(d.Key)).ToList()@mclaassen似乎是正确的-你有错误吗?@DStanley实际上没有运行它,只是在我的头脑中想出了它。@SaurabhSahasrabuddhe,我更新了我的答案,建议一种更有效的方法
join
在内部使用哈希表,因此那里的查找速度也应该更快。@Magnus,实际上,这可能取决于实际的词典。如果dictionary2有很多不在dictionary1中的项,那么第二种方法可能会更快。@Thomaslevsque我认为第二种方法总是更快,因为它不需要填充联接使用的内部哈希表。我只是说这可能不会有太大的区别。@SaurabhSahasrabuddhe,我更新了我的答案,建议一种更有效的方法
join
在内部使用哈希表,因此那里的查找速度也应该很快。@Magnus,实际上,这可能取决于实际的词典。如果dictionary2有很多不在dictionary1中的项,那么第二种方法可能会更快。@Thomaslevsque我认为第二种方法总是更快,因为它不需要填充联接使用的内部哈希表。我只是说这可能不会有太大的区别。