簡體   English   中英

添加到詞典 <string, string> 使用foreach

[英]Add to Dictionary<string, string> using foreach

在以下場景中,確保optionValue始終是唯一的最佳方法是什么?

public Dictionary<string, string> Dict = new Dictionary<string, string>();

    foreach (string optionKey in i.options.Keys)
    {
       string optionValue = i.options.Values.ToString();
       Dict.Add(optionKey, optionValue);
    }

編輯 :i.options包含鍵和值對。 我需要確保為每個鍵將相應的值添加到字典中

EDIT2 :更正了Dict.Add(optionKey,optionValue)的順序

試試吧:

if(!Dict.ContainsKey(optionValue))
   Dict.Add(optionValue, optionKey)

根據您的變量名稱,看起來您的鍵和值已反轉,如果optionKey是您的查找鍵,它應該是:

Dict.Add(optionKey, optionValue);

在詞典中,所有鍵都是唯一的。 如果要在向詞典添加條目時阻止異常,請使用

if (!Dict.ContainsKey(optionKey)) {
  Dict.Add(optionKey, optionValue);
} else {
  Debug.Print("Key '"+optionKey+"' already exists");
}

粗略瀏覽MSDN文檔表明,您可以使用明顯的方法ContainsKey(string)來檢查字典是否包含某個鍵。

取決於您希望如何處理重復項。

例如“最后一個贏”

foreach(...)
{
    // Will overwrite an existing key
    Dict[optionValue] = optionKey;
}

“第一個獲勝”:

foreach(...)
{
    if (!Dict.ContainsKey(optionValue)) Dict.Add(optionValue, optionKey);
}
public Dictionary<string, string> Dict = new Dictionary<string, string>();

foreach (string optionKey in i.options.Keys)
{
   string optionValue = i.options.Values.ToString();
   if(!Dict.ContainsValue(optionValue))
       Dict.Add(optionValue, optionKey);
}

請參閱http://msdn.microsoft.com/en-us/library/kw5aaea4(v=vs.100).aspx

其他人一直在建議您只是測試是否存在密鑰,如果存在則跳過添加。 但是,這可能會導致數據丟失。 您應該創建一個自定義類或類型,並將其與您的字典一起使用,如下所示:

public Dictionary <Guid,CustomObjectOrType> Dict = new Dictionary <Guid,CustomObjectOrType>();

這樣,您可以確保每個鍵都是唯一的(Guid),同時保留所有選項值和選項鍵。

如果您只是擔心異常,那么只需使用item屬性:

Dict [optionValue] = optionKey;

MSDN:如果未找到指定的鍵,則get操作將拋出KeyNotFoundException,並且set操作將使用指定的鍵創建新元素。

或者,如果您確實要進行檢查,請使用ContainsKey方法進行檢查

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

暫無
暫無

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

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