快速批量更新字典

And*_*old 2 c# dictionary

我有一个Dictionary<int, int>并且想要根据它们的当前值一次更新某些元素,例如将值为10的所有元素更改为具有值14或其他值.

我想象一下LINQ/lambda的东西很容易,但它看起来并不像我想象的那么简单.我目前的做法是:

List<KeyValuePair<int, int>> kvps = dictionary.Where(d => d.Value == oldValue).ToList();
foreach (KeyValuePair<int, int> kvp in kvps)
{
   dictionary[KeyValuePair.Key] = newValue;
}
Run Code Online (Sandbox Code Playgroud)

问题是它dictionary非常大(数十万个元素)并且我在循环中运行这个代码数千次,所以它非常慢.肯定有更好的办法...

rec*_*ive 6

这可能是错误的数据结构.您试图根据它们的值查找字典条目,这与通常的模式相反.也许你可以存储当前映射到某些值的键集.然后,您可以快速移动这些集,而不是分别更新每个条目.