标准的C语言for循环、Objective-C 1.0出现的NSEnumerator、Objective-C 1.0出现的for in快速遍历、块遍历。

遍历的话,一般是NSArray、NSDictionary、NSSet和自定义的collection。


0、初始化数据

NSArray *array = @[@"ele1", @"ele2", @"ele3", @"ele4"];
NSDictionary *dict = @{@"name" : @"xiaohong", @"age" : @"", @"gendar" : @"woman"};

1、使用for循环

// 遍历数组
for (int i = ; i < array.count; i++) {
NSString *eleString = [array objectAtIndex:i];
NSLog(@"%@", eleString);
}
// 遍历字典
for (int i = ; i < dict.count; i++) {
NSString *valueString = [dict.allValues objectAtIndex:i];
NSLog(@"%@", valueString);
}
// 附加:使用枚举块,forin也能反向遍历
for (NSString *eleString in [array reverseObjectEnumerator]) {
NSLog(@"%@", eleString);
}

2、使用for-in遍历。特点是简洁、高效。但是注意不要在forin循环体中对元素进行修改

// 遍历数组
for (NSString *eleString in array) {
NSLog(@"%@", eleString);
}
// 遍历字典
for (NSString *valueString in dict.allValues) {
NSLog(@"%@", valueString);
}
// 注意:
for (NSString *keyString in dict) {
// keyString就是dict中的key值
}

3、使用枚举器遍历

// 遍历数组
// 为这个数组生成一个顺序的枚举器,reverseObjectEnumerator为倒序枚举器
NSEnumerator *arrayEnumerator = [array objectEnumerator];
// 不能使用NSString *string = nil
NSString *string = @"";
while (string) {
string = [arrayEnumerator nextObject];
if (string != nil) {
NSLog(@"%@", string);
}
}
// 遍历字典
// 为这个字典生成一个遍历key的枚举器,objectEnumerator为遍历value的枚举器
NSEnumerator *dictKeyEnumerator = [dict keyEnumerator];
// 不能使用NSString *string = nil
NSString *keyString = @"";
while (keyString) {
keyString = [dictKeyEnumerator nextObject];
if (keyString != nil) {
NSLog(@"%@", keyString);
}
}
// 附加:使用枚举块,forin也能反向遍历
for (NSString *eleString in [array reverseObjectEnumerator]) {
NSLog(@"%@", eleString);
}

4、基于块枚举。handler中的参数类型和形参名都是可以进行更改的,这样就省去了手动强制转换代码。

// 枚举数组
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@", obj);
if (idx == array.count - ) {
*stop = YES;
}
}];
// 反向遍历数组
[array enumerateObjectsWithOptions:NSEnumerationReverse
usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@", obj);
if (idx == array.count - ) {
*stop = YES;
}
}];
// 枚举字典
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"%@", obj);
if ([key isEqualToString:@"name"]) {
*stop = YES;
}
}];
// 反向遍历字典
// 需要注意的是:只有在遍历数组或者有序set等有顺序的collection时,反向遍历才有意义。

OC中四种遍历方式的更多相关文章

  1. lua中for循环的四种遍历方式

    lua中for的四种遍历方式区别 table.maxn 取最大的整数key #table 从1开始的顺序整数最大值,如1,2,3,6 #table == 3   key,value pairs 取每一 ...

  2. c++ --> c++中四种类型转换方式

    c++中四种类型转换方式   c风格转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少缺点, 1)它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向 ...

  3. list的四种遍历方式

    1.手先增强for循环和iterator遍历的效果是一样的,也就说 增强for循环的内部也就是调用iteratoer实现的,但是增强for循环 有些缺点,例如不能在增强循环里动态的删除集合内容.不能获 ...

  4. Map 的四种遍历方式

    Map 的四种遍历方式 import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class ...

  5. java集合四种遍历方式

    package conection; import java.util.Iterator;import java.util.LinkedList;import java.util.List; publ ...

  6. HashMap 中7种遍历方式的性能分析

    随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历方法讲起,然后再从性能. ...

  7. Web.xml中四种验证方式

    源地址:https://blog.csdn.net/imimi_/article/details/78805642 <security-constraint> 的子元素 <http- ...

  8. map的四种遍历方式

    map是Java中非常常用的一种数据结构,但map不同于set和list都继承自Collection接口. 所以map没有实现Collection的Iterator 方法,自身没有迭代器来遍历元素. ...

  9. Java中四种遍历Map对象的方法

    方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Int ...

随机推荐

  1. 四、Python文件操作

    描述:Python的文件操作涉及对文件的读/写与编码的处理. 1.两种写法 1.1 第一种 1 f = open('文件路径', '文件操作方式', encoding='utf-8') 2 对文件操作 ...

  2. java用JSONObject生成json

    Json在前后台传输中,是使用最多的一种数据类型.json生成的方法有很多,自己只是很皮毛的知道点,用的时候,难免会蒙.现在整理下 第一种: import net.sf.json.JSONArray; ...

  3. git 工具常见命令

    1.git是什么 git是分布式版本管理工具,一台电脑既可以是客户端,也可以是服务端.工作过程中可以断开网络. git中的三个概念: 1.版本库:在初始化git版本库之后会生成一个隐藏的文件, .gi ...

  4. 说明与比较:new Vue() 和 export default {}

    在生成.导出.导入.使用 Vue 组件的时候,像我这种新手就会常常被位于不同文件的 new Vue() 和 export default{}.它们含义到底是什么,又有什么异同呢? 首先,Vue 是什么 ...

  5. CSS样式的引入&区别&权重&CSS层叠性&CSS样式的来源

    CSS样式的引入: 内部样式: 内部样式:写在当前页面style标签中的样式 内联样式:写在style属性中的样式 外部样式: link标签引入的CSS文件 @import引入的CSS文件,需要写在c ...

  6. window系统mysql安装后获取默认密码

    未设置密码,获取默认密码方法 第一步:进去mysql根目录下,如果没有data文件夹可以新建一个,找不到my.ini文件也新建一个(在根目录下创建的my.ini,重新配置的参数会覆盖源文件的参数,所以 ...

  7. Python学习第二十八课——Django(urls)

    Django框架中的urls配置: 首先通过pycharm创建一个Django项目: 例如要写blog的功能:则在digango_lesson中的urls代码如下: """ ...

  8. jquery 分页 Ajax异步

    //使用Ajax异步查询数据 <div class="table-responsive"> <table class="table table-bord ...

  9. 重装VisualSVN Server报错

    由于eclipse无法连接SVN服务器,尝试着重装SVN,安装到一半时,弹出如下图所示错误: 打开提示窗口输入services.msc,进入服务界面: 发现VisualSVN Server服务无法启动 ...

  10. 【读书笔记】图解HTTP完整流程

    1.1 使用 HTTP 协议访问 Web: 根据 Web 浏览器地址栏中指定的URL,从服务端获取资源等信息,在页面上展示. Web 使用一种 HTTP (超文本传输协议)作为规范,完成从客户端到服务 ...