Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where is the "Fold" LINQ Extension Method?

I found in MSDN's Linq samples a neat method called Fold() that I want to use. Their example:

double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };  double product =       doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor);  

Unfortunately, I can't get this to compile, either in their example or in my own code, and I can't find anywhere else in MSDN (like Enumerable or Array extension methods) that mention this method. The error I get is a plain old "don't know anything about that" error:

error CS1061: 'System.Array' does not contain a definition for 'Fold' and no  extension method 'Fold' accepting a first argument of type 'System.Array' could  be found (are you missing a using directive or an assembly reference?) 

I'm using other methods which I believe come from Linq (like Select() and Where()), and I'm "using System.Linq", so I think that's all OK.

Does this method really exist in C# 3.5, and if so, what am I doing wrong?

like image 831
Ken Avatar asked Aug 05 '09 01:08

Ken


2 Answers

You will want to use the Aggregate extension method:

double product = doubles.Aggregate(1.0, (prod, next) => prod * next); 

See MSDN for more information. It lets you specify a seed and then an expression to calculate successive values.

like image 109
Jason Avatar answered Sep 20 '22 09:09

Jason


Fold (aka Reduce) is the standard term from functional programming. For whatever reason, it got named Aggregate in LINQ.

double product = doubles.Aggregate(1.0, (runningProduct, nextFactor) => runningProduct* nextFactor); 
like image 43
Richard Berg Avatar answered Sep 21 '22 09:09

Richard Berg