我有一个包含键值的字典,我正在尝试修剪这些值的扩展名,但得到的异常信息是已经添加了具有相同键的项目。
不确定为什么会这样。
这是我使用的代码
我该如何克服这个问题?
dictFilesNotThere = dictFilesNotThere.ToDictionary
(t => t.Key.Remove(8, 3), t => t.Value);
关键值如下'7dim-058-ns',我试图把它变成'7dim-058'而不是
答案 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);