我想写产生的lucky numbers功能,为什么不生成幸运数字?
static IEnumerable<int> LuckyNumbers()
{
IEnumerable<int> luckyNumbers = Enumerable.Range(1, int.MaxValue);
int counter = 1;
while (true)
{
int number = luckyNumbers.ElementAt(counter++);
yield return number;
luckyNumbers = luckyNumbers.Where((_, index) => (index + 1) % number != 0);
}
}
但这产生:
2,5,7,11,13,17,21,...
这不是幸运数字。
为什么我的代码不工作?通过他们
IEnumerable<int> luckyNumbers = Enumerable.Range(1, int.MaxValue);
int counter = 1;
迭代并返回下一个幸运数字:我想:
开始与所有的自然数
while (true) { int number = luckyNumbers.ElementAt(counter++); yield return number;
删除所有
n
个数字来自序列:luckyNumbers = luckyNumbers.Where((_, index) => (index + 1) % number != 0);
我不明白为什么这不起作用,因为我打算。
请记住,每次执行第3步时,都会以新的顺序结束。现在,你确定你想要新的序列中的“计数器”元素吗?尝试通过一张纸... –
@JonSkeet我非常确定,我以为我的意思是每次都要采用上一代序列的下一个元素。但我可以在纸上试一试。 – theonlygusti
鉴于维基百科有一个工作的例子,我建议你在调试时遵循这一点。我注意到的第一个问题是,你从第二个元素开始,因为你有'counter = 1'而不是'counter = 0'。这意味着你永远不会返回1,这意味着一个幸运数字。 –