簡體   English   中英

了解代碼-Lambda表達式

[英]Understanding Code - lambda expressions

我一直在看這個Erathesthenes篩網的代碼,但由於我對lambda表達式的了解有限,而且文檔對我沒有多大幫助,因此我仍然無法了解“ 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()); 

實際上並沒有增加。 在此代碼的兩個lambda表達式中, i用作當前處理的值的臨時占位符。

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

表示“從pc大於cur第一個並將其分配給cur ”。

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

表示“取不等於cur且除以cur零提醒的所有並將其從pc中刪除”。

變量cur在while循環中更新:

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

i僅是謂詞的一部分,該謂詞返回i> cur時的第一次出現。 換句話說,在這些情況下,它是一個局部變量。

它不是我而是控制何時退出循環的cur變量

它不會遞增,它依賴於刪除成員的pc,直到不滿足while條件為止。

想像它之間的區別

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM