<p>La definition la plus facile a comprendre de <code>Aggregate</code> 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.</p>
<p><strong>Exemple 1. Additionner des nombres</strong></p>
<pre><code class="lang-auto">var nums = new[]{1,2,3,4};
var sum = nums.Aggregate( (a,b) => a + b);
Console.WriteLine(sum); // output: 10 (1+2+3+4)
</code></pre>
<p>Cela additionne <code>1</code> et <code>2</code> pour obtenir <code>3</code>. Puis additionne <code>3</code> (resultat precedent) et <code>3</code> (element suivant dans la sequence) pour obtenir <code>6</code>. Puis additionne <code>6</code> et <code>4</code> pour obtenir <code>10</code>.</p>
<p><strong>Exemple 2. Creer un CSV a partir d’un tableau de chaines</strong></p>
<pre><code class="lang-auto">var chars = new []{"a","b","c","d"};
var csv = chars.Aggregate( (a,b) => a + ',' + b);
Console.WriteLine(csv); // Output a,b,c,d
</code></pre>
<p>Cela fonctionne de maniere similaire. On concatene <code>a</code>, une virgule et <code>b</code> pour obtenir <code>a,b</code>. Puis on concatene <code>a,b</code> avec une virgule et <code>c</code> pour obtenir <code>a,b,c</code>. Et ainsi de suite.</p>
<p><strong>Exemple 3. Multiplier des nombres en utilisant une valeur initiale</strong></p>
<p>Pour etre complet, il existe une <a href="https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.aggregate">surcharge</a> de <code>Aggregate</code> qui prend une valeur initiale (seed).</p>
<pre><code class="lang-auto">var multipliers = new []{10,20,30,40};
var multiplied = multipliers.Aggregate(5, (a,b) => a * b);
Console.WriteLine(multiplied); //Output 1200000 ((((510)20)30)40)
</code></pre>
<p>Comme dans les exemples precedents, cela commence avec une valeur de <code>5</code> et la multiplie par le premier element de la sequence <code>10</code>, donnant un resultat de <code>50</code>. Ce resultat est transmis et multiplie par le nombre suivant dans la sequence <code>20</code> pour donner un resultat de <code>1000</code>. Cela continue a travers les 2 elements restants de la sequence.</p>
<p>Exemples en ligne : <a href="http://rextester.com/ZXZ64749">http://rextester.com/ZXZ64749</a></p>
<p>Documentation : <a href="https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.aggregate">https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.aggregate</a></p>
<p><strong>Addendum</strong></p>
<p>E</p>
<p><em>(Reponse tronquee)</em></p>