使用foreach </string,>添加到Dictionary <string,string =“”>

时间:2012-02-24 15:45:49

标签: c#

确保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)的顺序

7 个答案:

答案 0 :(得分:2)

试试吧:

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

根据您的变量名称​​,它看起来像你有关键和值反转,如果optionKey是你的查找键,它应该是:

Dict.Add(optionKey, optionValue);

答案 1 :(得分:1)

在词典中,所有键都是唯一的。如果要在向词典添加条目时阻止异常,请使用

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

答案 2 :(得分:1)

粗略浏览MSDN文档后发现,您可以使用明显的方法ContainsKey(string)来查看字典是否包含某个键。

答案 3 :(得分:0)

取决于您希望如何处理重复项。

例如“最后一个获胜”

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

“第一个获胜”:

foreach(...)
{
    if (!Dict.ContainsKey(optionValue)) Dict.Add(optionValue, optionKey);
}

答案 4 :(得分:0)

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

答案 5 :(得分:0)

其他人一直在建议你只是测试一下是否存在密钥,如果存在则跳过添加。但是,这可能会导致数据丢失。您应该创建一个自定义类或类型,并将其与您的字典一起使用,如下所示:

  

public Dictionary&lt; Guid,CustomObjectOrType&gt; Dict = new   字典&LT; Guid,CustomObjectOrType&gt;();

通过这种方式,您可以确保每个键都是唯一的(Guid),同时保留所有选项值和选项键。

答案 6 :(得分:0)

如果您只是担心异常,那么只需使用item属性:

Dict [optionValue] = optionKey;

MSDN:如果找不到指定的键,则get操作会抛出KeyNotFoundException,而set操作会创建一个具有指定键的新元素。

或者,如果您确实想要进行检查,请使用ContainsKey方法检查

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