构建总和比循环更有效的方法

Tob*_*oby 1 c#

我有两个大小相同的列表.两者都包含数字.生成第一个列表,第二个列表是静态的.由于我有许多生成的列表,我想找出哪一个是最好的.对我来说,最好的清单是最接近参考的清单.因此,我计算每个位置的差异并将其加起来.

这是代码:

/// <summary>
/// Calculates a measure based on that the quality of a match can be evaluated
/// </summary>
/// <param name="Combination"></param>
/// <param name="histDates"></param>
/// <returns>fitting value</returns>
private static decimal getMatchFitting(IList<decimal> combination, IList<MyClass> histDates)
{
    decimal fitting = 0;
    if (combination.Count != histDates.Count)
    {
        return decimal.MaxValue;
    }

    //loop through all values, compare and add up the result
    for (int i = 0; i < combination.Count; i++)
    {
        fitting += Math.Abs(combination[i] - histDates[i].Value);
    }
    return fitting;
}
Run Code Online (Sandbox Code Playgroud)

是否有更优雅但更重要,更有效的方式来获得所需的金额?

提前致谢!

Jon*_*Jon 5

您可以使用LINQ执行相同的操作,如下所示:

return histDates.Zip(combination, (x, y) => Math.Abs(x.Value - y)).Sum();
Run Code Online (Sandbox Code Playgroud)

这可以被认为更优雅,但它不能比你已经拥有的更有效.它也适用于任何类型IEnumerable(因此您不需要特定的IList),但这在您的情况下没有任何实际意义.

histDates如果您手头有这些信息,一旦差异的运行总和变得大于目前为止看到的最小总和,您也可以拒绝a .