c# – 用Linq迭代
发布时间:2020-12-16 01:52:11 所属栏目:百科 来源:网络整理
导读:我试图找到一种方法来从同一行中的 Linq方法访问以前的值. 我希望能够在Linq中使用这个通用表单: var values = Enumerable.Range( 1,100 ).Select( i = i + [last result] ); 但是如果没有多行lambda并且将结果存储在其他地方,我找不到这样做的方法. 所以我
我试图找到一种方法来从同一行中的
Linq方法访问以前的值.
我希望能够在Linq中使用这个通用表单: var values = Enumerable.Range( 1,100 ).Select( i => i + [last result] ); 但是如果没有多行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? } ); 这看起来很难看.我可以使用常规for循环在较少的代码中执行此操作. for (int i = 2; i < 10; i++) { calculated.Add(calculated[i - 2] + calculated[i - 1]); } 好像我能找到一种方法来做到这一点,我可以使用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; } } 然后你可以将Linq方法应用于这个枚举来实现你想要的结果(尝试迭代Fibonacci().例如Take(20)). Linq扩展方法不是每个编程问题的解决方案,我只能想象纯LINQ Fibonacci序列生成器看起来多么可怕. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |