【发布时间】:2020-03-18 13:56:21
【问题描述】:
对于我的应用程序,我构建了一个迭代器,我需要使用它产生的每个值以及前一个值。
例如,考虑以下迭代器,它产生斐波那契数列的第一项:
public static IEnumerable<int> GetFibonacciNumbers(int count)
{
int a = 0;
int b = 1;
int i = 0;
while (i < count)
{
yield return a;
int temp = a;
a = b;
b = temp + b;
i++;
}
}
现在我想使用这个枚举器来计算越来越准确的黄金比例估计值,这意味着我需要将产生的值与之前的值一起使用。以下方法有效:
static void Main(string[] args)
{
int fib0 = 0;
foreach (int fib1 in GetFibonacciNumbers(10))
{
var phi = (double)fib1 / fib0;
Console.WriteLine(phi);
fib0 = fib1;
}
}
问题在于phi 的第一个值是错误的,因为fib0 使用的第一个值实际上并不是序列的一部分。
【问题讨论】:
-
你不只需要从 1 而不是 0 开始 fib 序列吗?
-
为什么不在你的迭代器中
yield return (a, b)? -
@Sean 斐波那契数列只是说明问题的一个简单示例,我实际想要使用的迭代器要复杂得多。
-
@gazoh - 但如果你不向我们展示代码,那么你怎么能指望我们提供帮助?
-
@haim770 我没有想到这一点,它工作得很好,如果你把它作为答案发布,我很乐意接受。
标签: c# foreach ienumerable