iOS 遍历的几种使用方法(NSArray,NSDictiona

2017-02-08  本文已影响71人  T_label

反向遍历:

  for (NSString *obj in [arr reverseObjectEnumerator])

第三种:NSEnumerator(枚举查找)
NSEnumerator是一个抽象基类,其中定义了方法:
- (nullable ObjectType)nextObject;
nextObject 是其中最重要的方法,每次调用该方法会返回枚举中的下一个对象,直到返回nil。

例如:

  NSArray * arr = @[@"0", @"1", @"2", @"3", @"4", @"5"];
  //正向遍历
  NSEnumerator *enumerator = [arr objectEnumerator];
  //反向遍历
  NSEnumerator *enumerator = [arr reverseObjectEnumerator];
  id object;
  while ((object = [enumerator nextObject]) != nil) {
        //处理枚举器中的数据
        NSLog(@"%@", object);
  }

第四种:基于block的遍历

遍历数组:

  NSArray * arr = @[@"0", @"1", @"2", @"3", @"4", @"5"];
  [arr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
      NSLog(@"%@", obj);
      if ([obj isEqualToString:@"E"]) {
        *stop = YES;
      }
  }];

参数说明:obj表示数组中的元素,idx表示元素的下标,stop可以控制遍历何时停止,在需要停止时将stop = YES(注意前面的*不能忘)。

反向遍历:

  NSArray * arr = @[@"0", @"1", @"2", @"3", @"4", @"5"];
  [arr enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
      NSLog(@"%@", obj);
      if ([obj isEqualToString:@"E"]) {
          *stop = YES;
       }
  }];

遍历字典:

  NSDictionary *dic = @{@"1":@"11", @"2":@"22", @"3":@"33"};
  [dic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
      NSLog(@"%@", obj);
      if ([obj isEqualToString:@"22"]) {
          *stop = YES;
      }
  }];

如果知道对象的数据类型,就可以检测是否调用了该对象不具有的方法。如:

  NSDictionary *dic = @{@"1":@"11", @"2":@"22", @"3":@"33"};
  [dic enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *obj, BOOL * _Nonnull stop) {
      NSLog(@"%@", obj);
      if ([obj isEqualToString:@"22"]) {
          *stop = YES;
      }
  }];

并发遍历:

  NSArray * arr = @[@"0", @"1", @"2", @"3", @"4", @"5"];
  NSMutableArray *mutArr = [NSMutableArray arrayWithArray: arr];
  [mutArr enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) {
      obj = [NSString stringWithFormat:@"_%@", obj];
      [mutArr replaceObjectAtIndex:idx withObject:obj];
       NSLog(@"%@", obj);
       if ([obj isEqualToString:@"_I"]) {
          *stop = YES;
       }
  }];
上一篇 下一篇

猜你喜欢

热点阅读