[英]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.