理解代码 - lambda表达式

时间:2012-06-30 13:03:42

标签: c#

我正在查看这个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()); 

4 个答案:

答案 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);
}