回答完这个问题之后,我把以下的C#代码放在一起只是为了好玩:
public static IEnumerable<int> FibonacciTo(int max)
{
int m1 = 0;
int m2 = 1;
int r = 1;
while (r <= max)
{
yield return r;
r = m1 + m2;
m1 = m2;
m2 = r;
}
}
foreach (int i in FibonacciTo(56).Where(n => n >= 24) )
{
Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)
问题是我不喜欢需要将max参数传递给函数.现在,如果我不使用一个代码将输出正确的数据,但随后IEnumerable继续工作时似乎挂起.我该如何写这个,以便我可以像这样使用它:
foreach (int i in Fibonacci().Where(n => n >= 24 && n <= 56) )
{
Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 12
您需要使用的组合SkipWhile和TakeWhile替代.
foreach (int i in Fibonacci().SkipWhile(n => n < 24)
.TakeWhile(n => n <= 56))
{
Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)
这些能够根据条件结束循环; Where流输入它(适当地过滤)直到输入用完(在你的情况下,永远不会).
| 归档时间: |
|
| 查看次数: |
723 次 |
| 最近记录: |