2010-09-14 11 views
19

Mam następujący kod i próbuję dowiedzieć się, jak pomnożyć wszystkie wartości w moim IEnumerable.Pomnożenie wszystkich wartości w IEnumerable <int>

Pomyślałem, że może to być metoda Mnożenia, tak jak w przypadku Sum. Sądzę, że mógłbym zrobić foreach na każdy przedmiot, ale obecnie wydaje się to nużące.

Wszelkie sugestie?

//1:2:6 
string[] pkgratio = comboBox1.SelectedRow.Cells["PkgRatio"].Value.ToString().Split(':'); 
var ints = pkgratio.Select(x => int.Parse(x));   

int modvalue = ints.... 

Odpowiedz

31

Co szukasz jest sumą funkcji

int modValue = ints.Aggregate(1, (x,y) => x * y); 

Funkcja kruszywa odbywa się w wartości początkowej akumulatora, a następnie stosuje się operację każdej wartości wyliczenia tworząc nową wartość akumulatora. Tutaj zaczynamy od 1, a następnie mnożymy kiedykolwiek wartość przez aktualną wartość akumulatora.

Uwaga: W przypadku pustej wartości ints zostanie ona zwrócona 1. Może ona być lub może nie być odpowiednia dla danej sytuacji.

+0

Dzięki. Właśnie wypróbowałem ints.Aggregate (1, (x, y) => x + y); a za 1,2,6 to suma do 10. Myślę, że to dlatego, że dodaje 1 na początek. Pomnożenie będzie jednak w porządku? – Jon

+0

@Jon: Tak. Możesz także całkowicie pominąć nasienie i zrobić "ints.Aggregate ((x, y) => x * y)", ale spowoduje to wyjątek, jeśli dodasz go do pustej sekwencji. – LukeH

+0

Po prostu próbowałem i mimo to wyrzuca wyjątek, nawet jeśli nasiona są tam w pustej sekwencji – Jon

Powiązane problemy