zoukankan      html  css  js  c++  java
  • 迭代器

    • 迭代器 能使你获得序列中所有元素而不用关心其类型是array,list,link list或者其他序列结构。

      1,实现接口IEnumerable就可以实现数据迭代。其中调用GetEnumerator方法返回Enumerator接口的实现,就是迭代器本身。

      class BookColletion:IEnumerable{
            #region IEnumerable 成员
    
            public IEnumerator GetEnumerator()
            {
                //return 一个IEnumerator对象
                return new Enumerator(items);
            }
    
            private class Enumerator : IEnumerator {
    
                #region IEnumerator 成员
                public Enumerator(object[] items) {
                    elements = new object[items.Length];
                    Array.Copy(items,elements,items.Length);
                }
                public object Current
                {
                    get {
                  if(cursor>elements.Length-1){
                      throw new Exception("Enumeration already finished.");
                  }
                  if (cursor == -1) {
                      throw new Exception("Enumeration not started.");
                  }
                  return elements[cursor];
                  }
                }
    
                public bool MoveNext()
                {
                    ++cursor;
                    if(cursor>(elements.Length-1)){
                        return false;
                    }
                    return true;
                }
    
                public void Reset()
                {
                    cursor = -1;
                }
    
                #endregion
                private int cursor;
                private object[] elements = null;
            } 
            
    
            #endregion
            public object[] items=null;
        }
    
    
        class Program
        {
            static void Main(string[] args)
            {
                BookColletion b = new BookColletion();
                b.items = new object[] {"1","d","d"};
                IEnumerator enumertor = b.GetEnumerator();
                enumertor.MoveNext();
                Console.Write(enumertor.Current);
                Console.Read();
    
            }
        }

        您只需提供一个迭代器,即可遍历类中的数据结构。当编译器检测到迭代器时,它将自动生成 IEnumerable 或 IEnumerable<T> 接口的 Current、MoveNext 和 Dispose 方法。

         迭代器是可以返回相同类型的值的有序序列的一段代码。

         迭代器可用作方法、运算符或 get 访问器的代码体。

         迭代器代码使用 yield return 语句依次返回每个元素。yield break 将终止迭代。

         可以在类中实现多个迭代器。每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在 foreach 语句中被客户端代码调用,如下所示:foreach(int x in SampleClass.Iterator2){}

         迭代器的返回类型必须为 IEnumerable、IEnumerator、IEnumerable<T> 或 IEnumerator<T>。

    yield实现简介迭代:

      class Program
        {
    
            static void Main(string[] args)
            {
                //用数组实现输出
                TheWeek week = new TheWeek();
                for (int i = 0; i < week.weeks.Length;i++ ) {
                    Console.Write(week.weeks[i]+"
    
    ");
                }
                DayofTheWeek dweek = new DayofTheWeek();
                
                foreach(string x in dweek){
                    Console.Write(x);
                }       
                Console.Read();
            }
    
        }
        //迭代器 
         public  class TheWeek {
          //为public;
            public  string[] weeks ={ "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };
        }
        public class DayofTheWeek :IEnumerable{
            private string[] weeks ={ "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };
    
            #region IEnumerable 成员
            public IEnumerator GetEnumerator()
            {
          
                    for (int i = 0; i < weeks.Length; i++)
                    {
                         yield return weeks[i];
                    }
    
            }
            #endregion
        }
  • 相关阅读:
    目标检测梳理:基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN(转)
    4. 基于深度学习的目标检测算法的综述(转)
    2. 滑动窗口和 Bounding Box 预测(转)
    1. 初步认识目标定位、特征点检测、目标检测(转)
    redux (一)
    react-todoMVC脚手架
    SVN提示图标详解
    react ( 二 )
    react入门(一)
    JavaScript奇技淫巧
  • 原文地址:https://www.cnblogs.com/canbefree/p/3499531.html
Copyright © 2011-2022 走看看