当前位置: 首页 > 编程语言 > C#

求助LINQ表达式分享

时间:2023-04-10 21:15:58 C#

求助LINQ表达式如何编写一个LINQ表达式(首选方法调用语法)给出一个特定范围内的斐波那契数列,比如1到1000?好的;更多“FP”答案:使用系统;使用System.Collections.Generic;使用System.Linq;静态类程序{staticvoidMain(){Func>fib=null;fib=(n,m,cap)=>n+m>cap?Enumerable.Empty():Enumerable.Repeat(n+m,1).Concat(fib(m,n+m,cap));varlist=fib(0,1,1000).ToList();请注意,这在理论上可以写成单个lambda,但这很难。从这里使用迭代器块回答:foreach(longiinFibonacci().SkipWhile(i=>iiorlist:varlist=Fibonacci().SkipWhile(i=>iioutput:1123581321345589144233377610987这是枚举器基础解决方案。这是惰性求值。因此,当MoveNext()完成时,将生成下一个数字。foreach(intkinFibonacci.Create(10))Console.WriteLine(k);Fibonacci类:IEnumerable{privateFibonacciEnumertorfibEnum;publicFibonacci(intmax){fibEnum=newFibonacciEnumertor(max);}publicIEnumeratorGetEnumerator(){返回fibEnum;}System.Collections.IEnumeratorSystem.Collections.IEnumerable.GetEnumerator(){返回GetEnumerator();}publicstaticIEnumerableCreate(intmax){returnnewFibonacci(max);}privateclassFibonacciEnumertor:IEnumerator{privateinta,b,c,max;publicFibonacciEnumertor(intmax){this.max=max;重置();}//112358publicintCurrent{get{returnc;}}publicvoidDispose(){}objectSystem.Collections.IEnumerator.Current{get{returnthis.Current;}}publicboolMoveNext(){c=a+b;如果(c==0)c=1;一=b;b=c;;返回最大值-->0;}publicvoidReset(){a=0;b=0;}}}性能不高:valfibonacci=Enumerable.Range(0,1000).Aggregate(newList{1,0},(b,j)=>{b.Insert(0,b[0]+b[1]);返回b;});带有“yield”关键字的较晚但较快的版本:-)IEnumerableFibonacci(intlimit){intnumber=1,old=0;while(number最简单的使用linq打印斐波那契数列的方法以上就是C#学习教程:帮助LINQ表达式分享全部内容,如果对大家有用需要进一步了解C#学习教程,希望大家多多关注---Listlst=newList{0,1};for(inti=0;i本文采集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除,如有转载请注明出处: