簡體   English   中英

C#將一個記錄從一個字典復制到另一個

[英]C# Copy one record from one dictionary to another

我需要將一條記錄從一本字典復制到另一本,僅一個。 我嘗試了以下內容,它不會復制任何內容,但由於它在循環中,所以不會復制所有內容。 而且我需要檢查密鑰是否尚未復制到第二個字典,這就是為什么我遍歷第一個字典的原因。

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

請幫助,如果您需要更多信息,請告訴我。

嘗試這個:

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

比已經發布的其他答案有效一點(節省了一個字典查找)。

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;
}

我想您在該行的鍵中有一個我將稱為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;
      }
} 

刪除else子句

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM