C#将一条记录从一个字典复制到另一个字典

时间:2014-09-10 08:38:17

标签: c# .net dictionary

我需要将一条记录从一个字典复制到另一个字典,只需一个。我已经尝试了下面的内容,它不会复制一个,而是因为它在循环中所有内容。我需要检查密钥是否已经复制到第二个字典中,这就是我在第一个字典上循环的原因。

foreach (int key in firstDict.Keys) 
    {
        if (!secondDict.ContainsKey(key))
            secondDict.Add(key, firstDict[key]);
        else {break;}
    }  

请帮助,如果您需要更多信息,请告诉我。

4 个答案:

答案 0 :(得分:4)

试试这个:

foreach (int key in firstDict.Keys) 
{
    if (!secondDict.ContainsKey(key))
      {
        secondDict.Add(key, firstDict[key]);
        break;
      }
}  

答案 1 :(得分:3)

比已发布的其他答案更有效(保存一个字典查找)。

foreach(var kvp in firstDict)
{
    if(!secondDict.ContainsKey(kvp.Key))
    {
        secondDict[kvp.Key] = kvp.Value;
        break;
    }
}

如果您熟悉linq,您可能希望避免使用整个foreach ... break模式。这种模式非常难看,更重要的是让人感到困惑:当你真的只想复制一个时,看起来你想要复制一切。你的问题本身就证明了它是多么令人困惑:如果你没有得到一个简单正确的模式,这可能意味着模式不是很好。以下将完成这项工作,而且很清楚它只会在第二个字典中添加一个(最多)条目。

var missingEntry = firstDict
    // cast beacause KeyValuePair is a struct and I want to detect the case where there is no missing entry
    .Cast<KeyValuePair<TKey,TValue>?>()
    .FirstOrDefault(kvp => !secondDict.ContainsKey(kvp.Key));

// check whether there truely is a missing entry.
if (missingEntry != null)
{
    secondDict[missingEntry.Key] = missingEntry.Value;
}

答案 2 :(得分:1)

我想你在某个变量中拥有该行的键,我将调用key。例如,我将其值设置为3。

int key = 3;

if (!secondDict.ContainsKey(key))
            secondDict.Add(key, firstDict[key]);

编辑: 如果您只想要在secondDict中出现的任何单个条目:

foreach (KeyValuePair<int, MyValueType> kvp in firstDict) //Replace MyValueType with the real value type in firstDict
{
    if (!secondDict.ContainsKey(kvp.Key))
      {
        secondDict.Add(kvp.Key, kvp.Value);
        break;
      }
} 

答案 3 :(得分:1)

删除else子句

foreach (int key in firstDict.Keys) 
{
    if (!secondDict.ContainsKey(key)) {
        secondDict.Add(key, firstDict[key]);
        break;
    }
}