我正在查看这个eratosthenes筛子的代码,但我仍然无法得到“i”变量如何增加,因为我对lambda表达式知之甚少而且文档对我没什么帮助。谁能解释一下?
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());
答案 0 :(得分:3)
它实际上没有增加;在此代码i
中的两个lambda表达式中,都用作当前处理值的临时占位符。即,
cur = pc.First(i => i > cur);
表示“从cur
获取大于pc
的第一个值,并将其分配给cur
”。
pc.RemoveAll(i => i != cur && i % cur == 0);
表示“取不等于cur
的所有值,并且cur
除以零提醒,并将其从pc中删除”。
答案 1 :(得分:0)
变量cur在while循环中更新:
cur = pc.First(i => i > cur);
我只是谓词的一部分,它返回第一次出现,其中i&gt; CUR。换句话说,在这些情况下,它是一个局部变量。
答案 2 :(得分:0)
它不是我而是cur变量,它控制何时退出循环
答案 3 :(得分:0)
它不会增加,它依赖于已删除成员的pc,直到不满足while条件。
将其视为
之间的区别index = 1000;
while (index > 0)
{
pc.Remove(index);
index--;
}
和
while (pc.Count > 0)
{
pc.Remove(0);
}