2010-05-06 70 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]);