首页 > 其他分享 >迭代器

迭代器

时间:2024-10-23 16:53:20浏览次数:1  
标签:index 迭代 MoveNext IEnumerable IEnumerator public

迭代器概念:

迭代器又称光标,是程序设计的软件设计模式。迭代器提供一个方法顺序访问一个聚合对象的各个元素,而不暴漏内部的标识。
在表象上看,在外部用foreach遍历对象而不需要了解其结构的,都是实现迭代器的。

标准迭代器的实现方法

关键接口:IEnumerator,IEnumerable。
命名空间:using System.Collections。
实现方式:同时继承IEnumerator和IEnumerable,实现其中的方法。

使用类实现迭代器

  1. 能用foreach遍历的类,必须提供IEnumerator对象,所以继承IEnumerable,实现IEnumerator GetEnumerator()方法。
  2. 继承IEnumerable接口,实现 bool MoveNext()和 Reset()方法,继承object Current对象
  3. forearch 本质
     1. 会先调用IEnumerator对象的 GetEnumerator() 获取IEnumerator对象。
     2. 执行得到IEnumerator对象的MoveNext(),相当于移动光标到下一位,只要MoveNext()返回值为true,就会得到 Crrent对象,让后赋值给Item。
     3. 后面就会重复MoveNext(),直到得到返回值为false,就循环结束。
     4. Reset(),会在1处初始化时,将重置光标位置。

代码实现:

		public class MyList : IEnumerable, IEnumerator
		{
		    private readonly int[] array;
		    private int index = -1;
		    public object Current => array[index];
		    public MyList()
		    {
		        array = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
		    }
		    public IEnumerator GetEnumerator()
		    {
		        Reset();//每次foreach 都会调用一次GetEnumerator 
		        return this;
		    }
		    public bool MoveNext()//移动光标
		    {
		        if (index >= array.Length-1)
		            return false;
		        index++;
		        return true;
		    }
		    public void Reset()
		    {
		        index = -1;//重置光标位置
		    }
		}
		public class Program
		{
		    private static void Main(string[] args)
		    {
		        MyList myList = new MyList();
		        foreach (var item in myList)
		        {
		            Console.WriteLine(item);
		        }
		        Console.ReadKey();
		    }
		}

标签:index,迭代,MoveNext,IEnumerable,IEnumerator,public
From: https://www.cnblogs.com/comradexiao/p/18497728

相关文章

  • 可迭代对象
    ◼但是上面的代码整体来说看起来是有点奇怪的:我们获取一个数组的时候,需要自己创建一个index变量,再创建一个所谓的迭代器对象;事实上我们可以对上面的代码进行进一步的封装,让其变成一个可迭代对象;◼什么又是可迭代对象呢?它和迭代器是不同的概念;当一个对象实现了itera......
  • 可迭代对象、迭代器、生成器
    可迭代对象如果实现了__iter__方法,就认为对象是可迭代的.使用内置的iter函数可以获取迭代器的对象.检查对象x是否为迭代器,最好的方式是调用isinstance(x,abc.Iterator)序列都是可迭代的迭代器(Iterator):迭代器是一个对象,它实现了iter()和next()两个基本方法。ite......
  • 10.18Python基础迭代器生成器_函数式编程
    Python迭代器与生成器1.迭代器Iterator什么是迭代器迭代器是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器可以重复使用,而不会像列表那样在迭代时被修改。迭代器函数iter和next函数说明iter(iterable)从可迭代对象中返回一个迭代器,iterabl......
  • 18.Python基础篇-迭代器、生成器
    函数进阶-迭代器 双下方法:很少直接调用,一般情况下,都是通过其他语法触发的(Python解释器调用的方法)可迭代协议 与迭代器协议可迭代的iterable与迭代器iter可迭代协议:含有__iter__方法的都是可迭代的。可迭代的,一定可以被for循环。只要含有__iter__()方法能被for循环。......
  • 17.Python基础篇-闭包、装饰器、迭代器、生成器
    函数的进阶—闭包闭包的定义:嵌套函数,内部函数调用外部函数的变量。满足这个条件就算闭包。闭包案例演示:defouter():a=1definner():print('inner函数中打印的变量a:',a)#嵌套函数中使用了外层函数的变量。此时满足了闭包的条件。returninner......
  • 迭代式开发:提升软件项目管理效率的关键路径
    一、迭代式开发的核心理念要理解迭代式开发(IterativeDevelopment),首先要明白它与传统的开发方法有何不同。迭代式开发的核心思想是将软件开发过程分解为一系列小的、可管理的周期,称为“迭代”。每个迭代通常持续几周,结束时会交付一个可运行的产品版本,尽管这个版本可能并不完整,但它......
  • C++ STL迭代器、resize和reserve区别、map和unordered_map区别,vector和List区别、map
    1.STL迭代器删除元素迭代器失效是指在对容器进行修改时,原有的迭代器可能变得不可用。正确删除元素的方法是使用erase,并返回新的有效迭代器。示例代码#include<iostream>#include<vector>intmain(){  std::vector<int>vec={1,2,3,4,5};  //输出......
  • 【SOP】迭代管理-如何更好的避免问题发生
    人们往往不知道做事情的原因,所以不知道该如何做,下边先告诉大家,为什么要流程标准化?会给我们带来的好处,也就是所谓的SOP的优点(标准操作程序)。工作中曾遇到的问题,有些可能会导致故障或影响需求交付标题需求层面发生的问题:需求生效范围不清晰,导致故障平台升级时,通知不到位,......
  • 刷题计划 day12 二叉树(一)【定义】【递归遍历】【迭代遍历】
    ⚡刷题计划day12 二叉树(一)继续,这一小节主要是基础知识,但同样也是十分重要的,可以点个免费的赞哦~往期可看专栏,关注不迷路,您的支持是我的最大动力......
  • python中迭代什么意思
    1、迭代:迭代是通过重复执行的代码处理相似的数据集的过程,并且本次迭代的处理数据要依赖上一次的结果继续往下做,上一次产生的结果为下一次产生结果的初始状态,如果中途有任何停顿,都不能算是迭代。例如:(1)非迭代例子loop = 0while loop < 3:    print("Hello worl......