Domanda

Ho trovato in Esempi Linq di MSDN un metodo accurato chiamato Fold () che voglio usare. Il loro esempio:

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

Sfortunatamente, non riesco a compilare questo, nel loro esempio o nel mio codice, e non riesco a trovare altrove in MSDN (come i metodi di estensione Enumerable o Array) che menzionino questo metodo. L'errore che ottengo è un vecchio "non so nulla di questo" Errore:

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?)

Sto usando altri metodi che credo provengano da Linq (come Select () e Where ()), e sto usando "System.Linq", quindi penso che sia tutto OK.

Questo metodo esiste davvero in C # 3.5 e, in tal caso, cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Dovrai utilizzare il metodo di estensione Aggregate :

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

Vedere MSDN per ulteriori informazioni. Ti consente di specificare un seed e quindi un'espressione per calcolare i valori successivi.

Altri suggerimenti

Fold (aka Reduce) è il termine standard della programmazione funzionale. Per qualsiasi motivo, è stato nominato Aggregate in LINQ.

double product = doubles.Aggregate(1.0, (runningProduct, nextFactor) => runningProduct* nextFactor);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top