2010-05-06 3 views
2

Comment convertir le code ci-dessousConvert boucle en utilisant lambda (C# 3.0)

double sumxy = 0; 

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

en utilisant lambda

J'utilise C# 3.0. x et y sont la liste des numéros doubles

Merci

+2

Toute pourquoi voudriez-vous utiliser un lambda ici? – Lucero

+0

@Lucero parce que c'est trop cool! tout le monde parle de lambda! ça pourrait être la chose qui va tout réparer !!!/sarcasme – Andrey

+0

@Andrey, riiiiight ... Je suis peut-être démodé, mais je pense que LINQ et les choses qui s'y rapportent sont beaucoup trop utilisées. Sans parler des mises en garde cachées, comme l'exécution différée avec la plupart (mais pas toutes) les opérations LINQ etc., ce qui me semble difficile à saisir pour de nombreux autres développeurs .... * Car ils ne savent pas ce qu'ils font * – Lucero

Répondre

7

Si vous utilisez .NET 4, vous pouvez utiliser l'opérateur Zip:

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

Ou dans .NET 3.5:

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

@SLaks: Yup, juste remarqué que j'étais en train d'éditer. –

3

Il n'y a pas vraiment tout moment, mais si vous voulez:

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

Quelque chose comme ça ...

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