黑马程序员技术交流社区

标题: <分享>给大家总结OC数组的遍历方法(5种) [打印本页]

作者: 我说你是个逗比    时间: 2014-10-15 00:34
标题: <分享>给大家总结OC数组的遍历方法(5种)
听说有人面试的时候还问到过这个问题,在这里我为大家总结一下,大家有什么不懂或者感觉有什么不对的提出来,谢谢!

  1. int main()
  2. {
  3.     NSArray *array = @[@"jake",@"rose",@"mike"];
  4.    
  5.     //方法一
  6.    
  7.     for (int i = 0; i <array.count; i++) {
  8.         NSLog(@"%@",array[i]);
  9.     }
  10.    
  11.     //方法二
  12.    
  13.     for (int i = 0; i < array.count; i++) {
  14.         NSLog(@"%@",[array objectAtIndex:i]);
  15.     }
  16.     //其实方法一和方法二是一样的,可以合并为同一个方法,是最普通的方法,好处是可以获得对象和下标,也比较方便进行反向遍历
  17.    
  18.    
  19.    
  20.    
  21.     //方法三,利用数组的对象迭代器
  22.     NSEnumerator *enumerator = [array objectEnumerator];
  23.    
  24.     id obj;
  25.    
  26.     while ((obj = [enumerator nextObject]) != nil) {
  27.         NSLog(@"%@",obj);
  28.     }
  29.     //方法三一般要配合while一起使用,反向遍历要通过 [array reverseObjectEnumerator](反向迭代器)来实现。很明显,方法三看不到数组下标
  30.    
  31.    
  32.    
  33.    
  34.     //方法四 ,快速遍历
  35.     for(id obj in array)
  36.     {
  37.         NSLog(@"%@",obj);
  38.     }
  39.     //方法四是最常用的方法。坏处是想知道数组的下标就抓瞎了,反向遍历也要通过[array reverseObjectEnumerator]来实现

  40.    
  41.    
  42.     //方法五,利用block迭代器
  43.     [array enumerateObjectsUsingBlock:
  44.      ^(id obj,NSUInteger idx,BOOL *stop)
  45.      {
  46.          NSLog(@"%ld - %@",idx,obj);
  47.          
  48.          if (idx == 8) {
  49.              *stop = YES;
  50.          }
  51.      }
  52.      ];
  53.     //方法五是最强大的,可以知道对象和数组的下标,还可以满足一定的条件停止遍历。关于反向遍历,系统也提供了方法
  54.     [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  55.         NSLog(@"idx = %ld,id = %@",idx,obj);
  56.     }];
  57.    
  58.     return 0;
  59. }
复制代码




作者: alpha.huai    时间: 2014-10-15 01:11
enumerateObjectsWithOptions:NSEnumerationReverse  这个方法是亮点...没见到过。
作者: x65396731    时间: 2014-10-15 09:11
enumerateObjectsWithOptions:NSEnumerationReverse 这句是和返回的oc数组的排序顺序有关,貌似是倒序。
作者: 我说你是个逗比    时间: 2014-10-15 10:27
x65396731 发表于 2014-10-15 09:11
enumerateObjectsWithOptions:NSEnumerationReverse 这句是和返回的oc数组的排序顺序有关,貌似是倒序。 ...

就数多加了个增加了个描述排序顺序的属性
作者: 米匠    时间: 2014-10-15 15:52
好东西。。。。
作者: 菜鸟_琦    时间: 2014-10-15 16:22
赞一个,。。。。
作者: qiusiyu    时间: 2014-10-15 19:44
收藏了{:3_46:}
作者: Lizzie    时间: 2014-10-15 22:39
果断收藏!谢啦~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2