2012-06-30 2 views
0

나는 eratosthenes 체의이 코드를보고 있었지만 나는 람다 표현에 대한 지식이 제한되어 있고 문서가 도움이되지 않아서 "i"변수가 어떻게 증가 하는지를 알 수 없었다. 나 많이. 아무도 설명 할 수 있을까요?코드 이해 - 람다 표현

int cur = 1, total = 1000; 
var pc = Enumerable.Range(2, total).ToList(); 

while(cur <= Math.Sqrt(total)) 
{ 
    cur = pc.First(i => i > cur); 
    pc.RemoveAll(i => i != cur && i % cur == 0); 
} 

Console.WriteLine(pc.Max()); 

답변

3

실제로 증가하지는 않습니다. 이 코드의 두 람다 식에서 모두 i은 현재 처리 된 값의 임시 자리 표시 자로 사용됩니다. 즉,

cur = pc.First(i => i > cur); 

는 "가 pc에서 cur보다 크다고 제 값을 가지고 cur에 할당"을 의미한다.

pc.RemoveAll(i => i != cur && i % cur == 0); 

는 "cur 같지 않은 것을 모두 값을 가지고 cur에 의해 사업부 제로 알림이 및 PC에서 제거"를 의미한다.

+0

의 차이와 같은 그것의

생각해 그래서 정정 해줘, 난의 첫 번째 값이 될 것인가? –

+0

네, 맞습니다. –

0

가변 CUR은 while 루프 업데이트된다

cur = pc.First(i => i > cur); 

는 단순히 제 occurance I> CUR를 반환 술어의 일부이다. 즉,이 경우 로컬 변수입니다.

0

아니고 내가하지만

그것은 증가되지 않습니다
0

, 그것은 동안 조건이 충족되지 않을 때까지 제거 PC를 가진 구성원에 의존하는 것 루프를 종료 할 때 제어하는 ​​CUR 변수입니다. 만약 내가 잘못 ... 첫 번째 반복 동안

index = 1000; 
while (index > 0) 
{ 
    pc.Remove(index); 
    index--; 
} 

while (pc.Count > 0) 
{ 
    pc.Remove(0); 
}