2008-10-31 4 views
12

Uczę się LINQ i mam bardzo proste pytanie, które moim zdaniem pomoże mi lepiej zrozumieć technologię. Jak mogę znaleźć produkt tablicy int?Oblicz produkt za pomocą LINQ

Na przykład, co jest sposobem LINQ to zrobić:

int[] vals = { 1, 3, 5 }; 
return vals[0] * vals[1] * vals[2]; 

Odpowiedz

28

to będzie działać:

var product = vals.Aggregate(1, (acc, val) => acc * val); 

Zaczynasz z nasienia 1 a następnie funkcja jest wywoływana dla każdego twoich wartości z dwoma argumentami, acc, która jest bieżącą zakumulowaną wartością, i val, która jest wartością w tablicy; funkcja mnoży bieżącą zakumulowaną wartość przez wartość w tablicy, a wynik tego wyrażenia jest przekazywany jako acc do następnej funkcji. tj. łańcuch wywołań funkcji z podaną tablicą będzie:

(1, 1) => 1 
(1, 3) => 3 
(3, 5) => 15 
+0

+1. zalecamy używanie int zamiast var. –

+2

Używanie var jest decyzją osobistą/drużynową. Osobiście nie uważam, że informacje o typie są niezwykle użyteczne i odciągają cię od * celu * kodu. Napisałem o tym tutaj: http://gregbeech.com/blogs/tech/archive/2008/03/24/to-var-or-not-to-var-implicit-typing-is-the-question.aspx –

+0

Tak właśnie działa Aggregate. Wydaje się to niezwykle przydatne, nie mogę uwierzyć, że wcześniej nie nauczyłem się tego robić. –