zoukankan      html  css  js  c++  java
  • 用函数方法实现迭代器

      序列就是可迭代的,是一个迭代器,也就是实现了IEnumerable接口的。

      列表就是内存中的元素的集合。容易读写,通常以索引的方式访问。

      用函数方法实现迭代器

         private static IEnumerable<T> Sequence<T>(Func<T, T> getNext, T startValue, Func<T, bool> endReached)
            {
                if (getNext==null)   
                {
                    yield break;
                }
                yield return startValue;
                T val = startValue;
                while (endReached==null||!endReached(val))
                {
                    val = getNext(val);
                    yield return val;
                }
            } 

      验证

      var s = Sequence(x => x + 2, 1,x=>x>=19);
                foreach (var i in s)
                {
                    Console.WriteLine(i);
                }

      输出

     

      总结:

      1、序列都实现了IEnumerable接口,是迭代器。用foreach访问。

      2、函数可以作为参数传递给另一个函数,例如x=>x+2 就是委托(委托是匿名函数)。

      3、对上面Sequence函数的解释:(1)是泛型函数(2)getNext对迭代值操作,如果x=>x+2换成x=>x*3,就是对每一个迭代元素都增加3倍。

         (3)endReched是迭代结束条件。

  • 相关阅读:
    洛谷 题解 P5595 【【XR-4】歌唱比赛】
    洛谷 题解 CF1151D 【Stas and the Queue at the Buffet】
    洛谷 题解 CF299A 【Ksusha and Array】
    仙人掌找环
    2-SAT
    带花树
    帮我背单词
    csp2019退役祭
    P5284 [十二省联考2019]字符串问题 题解
    【网络流24题】魔术球问题
  • 原文地址:https://www.cnblogs.com/zhangyuanbo12358/p/4414563.html
Copyright © 2011-2022 走看看