【发布时间】:2014-01-02 21:14:56
【问题描述】:
我有两个与此处相同的双精度值列表:
List<double> list1 = something;
List<double> list2 = somethingElse;
我想减去这两个列表。清单很大,我想尽快完成。以下哪种方法更快:
public double CalculateDistance(List<double> list1, List<double> list2)
{
double dist = 0;
for (int i = 0; i != list1.Count; i++)
{
dist += Math.Pow(list1 [i] - list2 [i], 2.0);
}
return dist;
}
或者这个:
public double CalculateDistance(List<double> list1, List<double> list2)
{
double dist = list1.Zip(list2, (v1, v2) => Math.Pow(v1 - v2, 2.0)).Sum();
return dist;
}
我不知道 LINQ 在底层做了什么,所以我不确定哪个更好。
【问题讨论】:
-
自己测量...但首先,分析并确定此方法确实在您的应用程序的热门路径上。
-
你应该做一些错误检查以确保两个列表包含相同数量的记录,如果不愿意处理或抛出异常。
-
是的,他们有相同的金额或记录。我确定。我只是想了解哪个会带来更好的性能
-
LINQ 在后台并没有做任何“魔法”——如果有的话,它会引入更多开销,因为它只是在后台像往常一样迭代。 LINQ 的好处更多在于代码的简单性和可读性。
-
我不知道为什么这里的人总是试图变得复杂(老实说)。当然,我想在更短的时间内(秒)处理这两个列表。
标签: c# linq loops collections