2010-05-06 36 views
2

如何通过使用拉姆达转换为循环使用拉姆达(C#3.0)

我使用C#3.0的下面的代码

double sumxy = 0; 

for (int i = 0; i < x.Count; i++) 
{sumxy = sumxy + (x[i] * y[i]);} 

转换。 x和y是双号的列表

感谢

+2

任何时候你为什么要在这里使用lambda? – Lucero 2010-05-06 13:15:00

+0

@Lucero,因为它太酷了!每个人都在谈论lambda!它可能是将解决所有问题的东西! /讽刺 – Andrey 2010-05-06 13:23:24

+0

@Andrey,riiiiight ...我可能是老式的,但我认为LINQ和相关的东西被滥用了很多。不要谈及其中隐藏的警告,比如大多数(但不是全部)LINQ操作的延迟执行等等,我觉得很多开发人员很难理解它们...... *因为他们不知道他们做了什么* – Lucero 2010-05-06 13:31:20

回答

7

如果您使用.NET 4,你可以使用在Zip操作:

double sumxy = x.Zip(y, (a, b) => a * b).Sum(); 

或者在.net 3.5:

double sumxy = x.Select((value, index) => value * y[index]).Sum(); 
+0

@SLaks:是的,刚刚注意到,因为我正在编辑。 – 2010-05-06 13:18:46

3

确实没有任何一点,但如果你想:

Enumerable.Range(0, x.Count).Select(i => x[i] * y[i]).Sum(); 
0

事情是这样的......

var sumy = Enumerable.Range(0, x.Count).Aggregate((result, i) => result + (x[i]*y[i]);