0

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

不知道为什么会这样。

这是我使用的代码

我该如何克服这个问题?

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

关键值如下 '7dim-058-ns' 而我试图将其改为 '7dim-058'

4

2 回答 2

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作为所有上述项目的关键。由于在字典中你不能有重复的键,这就是例外的原因。

要解决此问题,您可以设置 acounter 并将其添加到密钥中,如果之前在字典中找到该密钥。就像是:

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);
}
于 2013-05-06T10:04:01.890 回答
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);
于 2013-05-06T10:03:54.213 回答