2010-06-30 4 views
2
int sum0 = 0; 
for (int i = 0; i < 10; i++) 
{ 
    sum0 += i; 
} 

int sum1 = Enumerable.Range(0, 10).Sum(); 
int sum2 = Enumerable.Range(0, 10).Aggregate((x, y) => x + y); 
int sum3 = Enumerable.Range(0, 10).Aggregate(0, (x, y) => x + y); 

위의 4 개의 표현식은 모두 동일한 작업을 수행합니다. 0에서 10까지의 합계를 찾습니다. sum0과 sum1의 계산을 이해합니다. 그러나 sum2와 sum3은 무엇입니까? 람다가 두 개의 파라미터 (x, y)를 사용하는 이유는 무엇입니까?집계 람다 식

답변

5

bdukes '대답에 확장, 람다는

(x = [value of last lambda expression], y = [next value]) => x+y 

소요 SUM3는 초기 x 값을 설정할 수 있습니다.

3

Enumerable.Aggregate 메서드는 집계의 현재 값과 값을 열거 형에서 가져 오는 함수를 필요로합니다. sum3에 대한 과부하도 집계의 시작 값을 제공합니다.

0

X가 현재 총계를 보유하고 있고, Y가 각 요소에 대해 더해집니다.

Foreach (y) X = X + Y;

+0

에서

string sentence = "the quick brown fox jumps over the lazy dog"; // Split the string into individual words. string[] words = sentence.Split(' '); // Prepend each word to the beginning of the // new sentence to reverse the word order. string reversed = words.Aggregate((workingSentence, next) => next + " " + workingSentence); Console.WriteLine(reversed); // This code produces the following output: // // dog lazy the over jumps fox brown quick the 

그래서 X는 Y 추가 할 수있는 변수에 반환 된 값입니다? 감사합니다. 마이크! –

0

Aggregate 확장 방법은 골재를 계산 (Func<T1,T2,TResult>)이 ..

sum2 지정된 기능마다 공급 xy (들면 yx 추가 하나임이 모두 가산하는 기능을 가지고 열거의 항목).

sum3의 추가 매개 변수는 누적 기입니다. 각 연산에 ​​대해 추가해야하는 값입니다. 0이므로 추가 값없이 열거 형의 모든 항목을 본질적으로 합산합니다.

0

sum2은 사용자 지정 함수 x + y을 사용하여 목록의 각 요소를 집계합니다. 집계는 정수 0의 기본값으로 시작하여 첫 번째 요소를 추가합니다. 그런 다음 그 값을 취하여 다음 요소를 추가합니다. 요소가 없어 질 때까지 계속됩니다. 그런 다음 최종 수치를 반환합니다.

sum3은 정확히 sum2과 동일하지만 특정 값이 0 인 명시 적으로 집계를 시작합니다.

의미 상 모든 세 가지는 동일하지만 (여기에 제시된 것처럼), 집계 함수와 초기 시작 값을 변경하여 모든 종류의 사용자 지정 집계를 생성 할 수 있습니다.

또 다른 방법으로 .Sum().Aggregate(0, (x, y) => x + y);의 약자입니다.

0

X는 ... 값 등등

step 1) 1 
step 2) 3 
step 3) 6 
step 4) 10 

되고, 그래서 값 "축적"는 중복되어 시작 값 (:)

SUM3의 0 변수입니다