Explication de l'algorithme LINQ Aggregate

Explication de l’algorithme LINQ Aggregate

La definition la plus facile a comprendre de Aggregate est qu’il effectue une operation sur chaque element de la liste en tenant compte des operations precedentes. C’est-a-dire qu’il effectue l’action sur le premier et le deuxieme element et transmet le resultat. Ensuite, il opere sur le resultat precedent et le troisieme element et transmet le resultat. Etc.

Exemple 1. Additionner des nombres

var nums = new[]{1,2,3,4};
var sum = nums.Aggregate( (a,b) => a + b);
Console.WriteLine(sum); // output: 10 (1+2+3+4)

Cela additionne 1 et 2 pour obtenir 3. Puis additionne 3 (resultat precedent) et 3 (element suivant dans la sequence) pour obtenir 6. Puis additionne 6 et 4 pour obtenir 10.

Exemple 2. Creer un CSV a partir d’un tableau de chaines

var chars = new []{"a","b","c","d"};
var csv = chars.Aggregate( (a,b) => a + ',' + b);
Console.WriteLine(csv); // Output a,b,c,d

Cela fonctionne de maniere similaire. On concatene a, une virgule et b pour obtenir a,b. Puis on concatene a,b avec une virgule et c pour obtenir a,b,c. Et ainsi de suite.

Exemple 3. Multiplier des nombres en utilisant une valeur initiale

Pour etre complet, il existe une surcharge de Aggregate qui prend une valeur initiale (seed).

var multipliers = new []{10,20,30,40};
var multiplied = multipliers.Aggregate(5, (a,b) => a * b);
Console.WriteLine(multiplied); //Output 1200000 ((((5*10)*20)*30)*40)

Comme dans les exemples precedents, cela commence avec une valeur de 5 et la multiplie par le premier element de la sequence 10, donnant un resultat de 50. Ce resultat est transmis et multiplie par le nombre suivant dans la sequence 20 pour donner un resultat de 1000. Cela continue a travers les 2 elements restants de la sequence.

Exemples en ligne : http://rextester.com/ZXZ64749

Documentation : https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.aggregate

Addendum

E

(Reponse tronquee)