Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将两个字典相乘_C#_Performance_Dictionary - Fatal编程技术网

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。忘了吧。这应该允许我在已经找到我需要的东西之后不必再次迭代。好吧,这个函数不再在分析器中显示得很高,所以这就是解决方案。谢谢“避免交叉”