如何通過使用拉姆達轉換爲循環使用拉姆達(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是雙號的列表
感謝
如何通過使用拉姆達轉換爲循環使用拉姆達(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是雙號的列表
感謝
如果您使用.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();
@SLaks:是的,剛剛注意到,因爲我正在編輯。 – 2010-05-06 13:18:46
確實沒有任何一點,但如果你想:
Enumerable.Range(0, x.Count).Select(i => x[i] * y[i]).Sum();
事情是這樣的......
var sumy = Enumerable.Range(0, x.Count).Aggregate((result, i) => result + (x[i]*y[i]);
任何時候你爲什麼要在這裏使用lambda? – Lucero 2010-05-06 13:15:00
@Lucero,因爲它太酷了!每個人都在談論lambda!它可能是將解決所有問題的東西! /諷刺 – Andrey 2010-05-06 13:23:24
@Andrey,riiiiight ...我可能是老式的,但我認爲LINQ和相關的東西被濫用了很多。不要談及其中隱藏的警告,比如大多數(但不是全部)LINQ操作的延遲執行等等,我覺得很多開發人員很難理解它們...... *因爲他們不知道他們做了什麼* – Lucero 2010-05-06 13:31:20