iOS设计模式--迭代器

学习迭代器之前,先看一种数据结构--线性表


线性表:线性表是最基本,最简单,也是最常用的一种数据结构。

线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用于大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了哨位结点)。

我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所有双链表和循环链表依旧是线性表。

在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受线性表主要包括栈和队列,受限表示对结点的操作受限制。

线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。

如下图为栈和队列结构图:



用代码实现一个链表:

首先创建一个结点类《Node》:

Node.h:

Node.m:


然后创建一个链表类《LinkedList》:

LinkedList.h:

LinkedList.m:


迭代器模式:

迭代器(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

首先看一个系统的迭代器模式,遍历一个集合中的所有元素:

//系统的迭代器

//创建集合对象

NSArray *datas = @[@"A", @"B", @"C", @"D"];

//从集合对象创建迭代器

NSEnumerator *iterator = [datas objectEnumerator];

//从集合对象中访问元素

id arrayObj = nil;

while (arrayObj = [iterator nextObject]) {

NSLog(@"arrayObj:%@", arrayObj);

}

打印结果:A,B,C,D


实现自定义的迭代器:

1,创建结点类和链表类

《Node》,《LinkedList》

Node.h:



Node.m:


LinkedList.h:


LinkedList.m:


2.创建一个迭代器协议类《IteratorProtocol》



3.创建迭代器《LinkedListIterator》:

LinkedListIterator.h:


LinkedListIterator.m:


4.实现:



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容