迭代器学习(一)

  迭代器模式是行为模式的一种范例,行为模式是一种简化对象之间通信的设计模式。实际上,它允许你访问一个数据项序列中的所有元素,而无须关心序列是什么类型--数组、列表、链表或者任何其他类型。它能非常有效地构建出一个数据管道,经过一系列不同的转换或过滤后再从管道的另一端出来,实际上,这也是Linq的核心模式之一。

  在.NET中,迭代器模式是通过IEnumerator和IEnumerable接口及他们的泛型等价物来封装的。如果某个类型实现了IEnumerable接口,就意味着它可以被迭代访问。调用GetEnumerator方法将返回IEnumerator的实现,这就是迭代器的本身。可以将迭代器想象成数据库的游标,即序列中的某个位置。迭代器只能在序列中向前移动,而且对于同一个序列可能同事存在多个迭代器操作。

  我们用的foreach语句实现了访问迭代器的内置支持。foreach语句被编译后会调用GetEnumerator和MoveNext方法,以及current属性,加入IDisposable也实现了,程序最后还会自动销毁迭代器对象,这是一个虽不起眼但是却很有用的语法糖。

时间: 2024-10-25 01:25:38

迭代器学习(一)的相关文章

Python学习---迭代器学习1210

可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的generator function 注意:for循环帮我们把集合数据变为一个迭代器[利用iter方法],然后利用next()方法输出,最后帮我们处理异常[循环的终止],for循环本质上就是通过不断调用next()函数实现 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable. 可以使用isinstance(

《Lua程序设计》9.3 以协同程序实现迭代器 学习笔记

例:编写一个迭代器,使其可以遍历某个数组的所有排列组合形式.代码如下: function permgen(a, n) n = n or #a -- 默认n为a的大小 if n <= 1 then -- 还需要改变吗? printResult(a) else for i=1,n do -- 将第一个元素放到数组末尾 a[n], a[i] = a[i], a[n] -- 生成其余元素的排列 permgen(a, n-1) -- 恢复第i个元素 a[n], a[i] = a[i], a[n] end

迭代器学习之一:使用IEnumerable和IEnumerator接口

写博客是检验我学习的成果之一以及自我总结的一种方式,以后会经常利用这种方式进行技术交流和自我总结,其中认识不深难免会有错误,但是一直懂得不懂就问,不懂就学的道理! 1.首先看一个简单的列子 1 int[] myArray = { 1, 32, 43, 343 }; 2 //很少这样写的 3 IEnumerator myie = myArray.GetEnumerator(); //获取需要遍历的枚举数 4 myie.Reset(); //重置 5 while (myie.MoveNext())

Python学习---装饰器/迭代器/生成器的学习【all】

Python学习---装饰器的学习1210 Python学习---生成器的学习1210 Python学习---迭代器学习1210 原文地址:https://www.cnblogs.com/ftl1012/p/9484145.html

学习日记之迭代器模式和Effective C++

迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示. (1),当需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑迭代器模式. (2),你需要对聚集有多种方式遍历时,可以考虑用迭代器模式. (3),当遍历不同的聚集结构,应提供如开始.下一个.当前项等统一的接口. (4),迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器来负责,这样即可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据. Effec

C++学习笔记之迭代器

模板是的算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型.理解迭代器是理解STL的关键. 迭代器应该具备的特征: (1)应该能够对迭代器进行解除引用的操作,以便能够访问它引用的值.即如果P是一个迭代器,则应该对*P进行定义 (2)应该能够将一个迭代器赋给另一个迭代器.如果P和Q都是迭代器,则应对P=Q定义. (3)应该能够对迭代器进行比较,看它们是否相等.即如果P和Q都是迭代器,则应对P==Q和P!=Q进行定义. (4)应该能够使用迭代器遍历容器中的所有元素,这可以通过迭代器定义的+

Lua学习笔记(七):迭代器与泛型for

1.迭代器与闭包 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素.在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素. 迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来自于哪里和将要前往哪里.闭包提供的机制可以很容易实现这个任务.记住:闭包是一个内部函数,它可以访问一个或者多个外部函数的外部局部变量.每次闭包的成功调用后这些外部局部变量都保存他们的值(状态).当然如果要创建一个闭包必须要创建其外部局部变量.所以一个典型的闭包的结构包含

Python学习笔记8(迭代器、生成器、装饰器)

1.列表生成式 要想学习生成器和迭代器,首先得了解另外一个概念,列表生成式. 想要生成一个0~9的列表的时候,首先想到的就是range(0,10) >>>a = range(0,10) >>>print(a) #3.0输出结果 range(0,10) #2.0输出结果 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 在3.0的版本呢当中range只是用来生成一个迭代器了,但是在2.0的版本里可以使用range来快速生成list. 但是想要生成一个[1*1,

Python学习之三大名器-装饰器、迭代器、生成器

Python学习之三大名器-装饰器.迭代器.生成器 一.装饰器     装饰,顾名思义就是在原来的基础上进行美化及完善,器这里指函数,所以说装饰器就是装饰函数,也就是在不改变原来函数的代码及调用方式的前提下对原函数进行功能上的完善.其核心原理其实是利用闭包.     格式 @关键字+装饰函数          被装饰函数()      注意:@行必须顶头写而且是在被装饰函数的正上方     按照形式可以分为:无参装饰器和有参装饰器,有参装饰器即给装饰器加上参数     以下示例是一个无参装饰器,