ios 遍历方式


在开发的过程中,我们经常对数组,字典,以及一些其他的集合进行遍历,ios也给我们提供各种各样的遍历方式,现在我就简单列几种遍历方式

/**
 *  使用 NSEnumerator 遍历
 */
- (void)test1
{
  NSArray *arrayM = @[@"A",@"B",@"C",@"D",@"E"];
  NSEnumerator *arrayEmt = [arrayM objectEnumerator];
  NSString *obj;
  while ((obj = [arrayEmt nextObject]) != nil) {
    NSLog(@"obj-----%@-----",obj);
  }
  
  
  NSSet *setM = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
  NSEnumerator *setEmt = [setM objectEnumerator];
  NSString *setObj;
  
  while ((setObj = [setEmt nextObject]) != nil) {
    NSLog(@"setObj------%@------",setObj);
  }
  
  
  // 反向遍历
  NSArray *arrayM1 = @[@"1",@"2",@"3",@"4",@"5"];
  NSEnumerator *am = [arrayM1 reverseObjectEnumerator];
  NSString *obj1;
  
  while ((obj1 = [am nextObject])!=nil) {
    NSLog(@"obj1------%@------",obj1);
  }
}


/**
 *  基于BLock的遍历方法
 */

- (void)block
{
  NSArray *am = @[@"A",@"B",@"C",@"D",@"E"];
  
  [am enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    
    NSLog(@"all-----%@------",obj);

    if ([obj isEqualToString:@"3"]) {
      *stop = YES;
    }
  }];
  
  
  // 反向编译
  [am enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    NSLog(@"-------%@-----",obj);
  }];
}


/**
 *  使用GCD的dispatch_apply函数,一般用于处理耗时较长,迭代次数较多的情况
 */
- (void)GCD
{
  NSArray *am = @[@"1",@"2",@"3",@"4",@"5"];
  
  dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
  
  dispatch_apply(am.count, queue, ^(size_t index) {
    
    NSLog(@"-------%@-----%@",am[index],[NSThread currentThread]);
  });
}

以上几种遍历方式,各自都有优缺点,大家在开发的过程中,根据需求择优选择,希望对大家有所帮助





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值