美文网首页
iOS设计模式--迭代器

iOS设计模式--迭代器

作者: live111 | 来源:发表于2016-08-27 20:14 被阅读0次

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

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

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

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

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

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

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

用代码实现一个链表:

首先创建一个结点类《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.实现:


相关文章

网友评论

      本文标题:iOS设计模式--迭代器

      本文链接:https://www.haomeiwen.com/subject/ygpdsttx.html