![](/img/trans.png)
[英]Using an Dictionary<string, object> as Dictionary<string, Dictionary<string, string>>
[英]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方法進行檢查
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.