C# 将两个字典相乘
是否有更理想的方法来执行以下操作-C# 将两个字典相乘,c#,performance,dictionary,C#,Performance,Dictionary,是否有更理想的方法来执行以下操作- int interactionScore = 0; foreach (var completionResult in needs.Keys.Intersect(results.Keys)) { interactionScore -= results[completionResult] * needs[completionResult]; } 需求和结果都是小字典(每个大约2-10个条目
int interactionScore = 0;
foreach (var completionResult in needs.Keys.Intersect(results.Keys))
{
interactionScore -= results[completionResult] * needs[completionResult];
}
需求和结果都是小字典(每个大约2-10个条目),但是我运行这个循环的次数非常多,这会影响我的性能,所以我想知道是否有更有效的方法来实现类似的结果(只乘以两个字典中存在的条目)。避免
相交
int interactionScore = 0;
foreach (var key in needs.Keys)
{
if (results.TryGetValue(key, out int result))
{
int need = needs[key];
interactionScore -= result * need;
}
}
你不能缓存结果吗?字典会改变吗?首先,限制因素是什么?计算字典的交集或在结果上运行循环?它们预计会改变。不完全是这样,因此如果我找不到更好的解决方案,我将进行一些缓存,但这将是一个相当麻烦的问题。探查器声称Intersect方法内部的交互是最大的罪魁祸首。如果有帮助,我将通过几个“结果”运行相同的“需求”但是每个交叉口的分数需要分开,所以我猜这没用!TryGetValue。忘了吧。这应该允许我在已经找到我需要的东西之后不必再次迭代。好吧,这个函数不再在分析器中显示得很高,所以这就是解决方案。谢谢“避免交叉”