我有一个包含键值的字典,我正在尝试修剪这些值的扩展名,但得到异常消息,即已添加具有相同键的项目。
不知道为什么会这样。
这是我使用的代码
我该如何克服这个问题?
dictFilesNotThere = dictFilesNotThere.ToDictionary
(t => t.Key.Remove(8, 3), t => t.Value);
关键值如下 '7dim-058-ns' 而我试图将其改为 '7dim-058'
我有一个包含键值的字典,我正在尝试修剪这些值的扩展名,但得到异常消息,即已添加具有相同键的项目。
不知道为什么会这样。
这是我使用的代码
我该如何克服这个问题?
dictFilesNotThere = dictFilesNotThere.ToDictionary
(t => t.Key.Remove(8, 3), t => t.Value);
关键值如下 '7dim-058-ns' 而我试图将其改为 '7dim-058'
假设您在字典中有以下项目:
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);
}
如果已存在相同的密钥,则必须指定要保留的密钥,例如第一个:
dictFilesNotThere.Select(kv => new { kv, newkey = kv.Key.Substring(0, 8) })
.GroupBy(x => x.newkey)
.ToDictionary(g => g.Key, g => g.First().kv.Value);