繁体   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