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