我试图找到一种方法来从同一行中的Linq方法访问以前的值.
我希望能够在Linq中使用这个通用表单:
var values = Enumerable.Range( 1, 100 ).Select( i => i + [last result] );
Run Code Online (Sandbox Code Playgroud)
但是如果没有多行lambda并且将结果存储在其他地方,我找不到这样做的方法.
所以我在Linq能做的最好的斐波纳契总和是:
List<int> calculated = new List<int>( new int[] { 1, 2 });
var fibonacci = Enumerable.Range(2, 10).Select(i =>
{
int result = calculated[i - 2] + calculated[i - 1];
calculated.Add(result);
return result; // and how could I just put the result in fibonacci?
}
);
Run Code Online (Sandbox Code Playgroud)
这看起来很难看.我可以使用常规for循环在较少的代码中执行此操作.
for (int i = 2; i < 10; i++)
{
calculated.Add(calculated[i - 2] + calculated[i - 1]);
}
Run Code Online (Sandbox Code Playgroud)
好像我能找到一种方法来做到这一点,我可以使用Linq进行大量的线性编程并总结很多迭代公式.
如果您正在寻找一种创建Fibonacci序列生成器的方法,那么最好编写自己的生成器函数,而不是使用Linq扩展方法.像这样的东西:
public static IEnumerable<int> Fibonacci()
{
int a = 1;
int b = 0;
int last;
for (;;) {
yield return a;
last = a;
a += b;
b = last;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将Linq方法应用于此枚举,以实现您想要的结果(Fibonacci().Take(20)例如,尝试迭代).
Linq扩展方法不是每个编程问题的解决方案,我只能想象纯LINQ Fibonacci序列生成器看起来多么可怕.
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |