修剪字典键值扩展时的例外情况

时间:2013-05-06 09:57:39

标签: c# dictionary

我有一个包含键值的字典,我正在尝试修剪这些值的扩展名,但得到的异常信息是已经添加了具有相同键的项目。

不确定为什么会这样。

这是我使用的代码

我该如何克服这个问题?

dictFilesNotThere = dictFilesNotThere.ToDictionary
            (t => t.Key.Remove(8, 3), t => t.Value);

关键值如下'7dim-058-ns',我试图把它变成'7dim-058'而不是

2 个答案:

答案 0 :(得分:2)

假设您在字典中有以下项目:

dictFilesNotThere.Add("7dim-058-ns", 1);
dictFilesNotThere.Add("7dim-058-n2", 2);
dictFilesNotThere.Add("7dim-058-n3", 2);

然后通过t.Key.Remove(8, 3)删除后,您将获得:7dim-058作为上述所有项目的关键字。因为在字典中你不能有重复的键,这就是异常的原因。

要解决此问题,您可以设置counter并将其添加到密钥,如果之前在字典中找到密钥。类似的东西:

Dictionary<string, int> dictFilesNotThereCopy = new Dictionary<string, int>();
int counter = 0;
foreach (KeyValuePair<string,int> item in dictFilesNotThere)
{
    if (dictFilesNotThereCopy.ContainsKey(item.Key.Remove(8, 3)))
        dictFilesNotThereCopy.Add((item.Key.Remove(8, 3) + (counter++)).ToString(), item.Value);
    else
        dictFilesNotThereCopy.Add(item.Key.Remove(8, 3), item.Value);
}

答案 1 :(得分:1)

如果已存在相同的密钥,则必须指定要保留的密钥,例如第一个:

dictFilesNotThere.Select(kv => new { kv, newkey = kv.Key.Substring(0, 8) })
            .GroupBy(x => x.newkey)
            .ToDictionary(g => g.Key, g => g.First().kv.Value);