标准的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时,反向遍历才有意义。

最新文章

  1. PDO运用
  2. short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确
  3. 表单,css
  4. Struts2的一个问题: 找不到struts.xml的路径问题
  5. 14.6.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预取
  6. javascript定时器:setTimeout与setInterval
  7. CocoaPods停在Analyzing dependencies解决方案
  8. Retrofit,Rxjava,OkHttp3的配置
  9. 使用Arrays.asList抛出java.lang.UnsupportedOperationException
  10. FFT的一种迭代实现
  11. 小程序图表wx-chart
  12. git第六节---git 远程仓库
  13. 手动搭建ABP2.1.3——基础框架
  14. Java进程线程理解
  15. scipy稀疏矩阵
  16. Java.Util.List(List接口)
  17. [JL]最后的晚餐 动态规划(DP) codevs5318
  18. 【转】JABC访问oracle数据库报ORA-12505
  19. win7共享文件夹设置无密码
  20. c++实现全密码生成

热门文章

  1. ZooKeeper下载安装配置-单机版配置
  2. 计算机二级-C语言-程序填空题-190117记录-对文件的处理,复制两个文件,往新文件中写入数据。
  3. 动态规划: 最大m子段和问题的详细解题思路(JAVA实现)
  4. js中substr、substring、indexOf、lastIndexOf的用法
  5. Cisco AP-AP重置操作
  6. A10131013 Battle Over Cities (25分)
  7. Codeforces Round #589 (Div. 2)E(组合数,容斥原理,更高复杂度做法为DP)
  8. Centos10卸载nginx
  9. phpsduty安装SSL证书,apache不能启动,解决方案
  10. problem :无法显示activemq的管理界面