iOS遍歴のいくつかの使用方法(NSArray,NSDictionary,NSSet)

3907 ワード

  • データを巡回し、最もよく使われるのはforループと高速巡回であり、他の見慣れない方法もあり、ここで必要に応じて記録を行う.1つ目は、よく使われるforループです.cでもよく使われています.例えば、配列NSArray*arr=@[@"0",@"1",@"2",@"3",@"4",@"5";for (int i = 0; i < arr.count; i++) { NSLog(@"%@", arr[i]); }
        
    NSDictionary *dic = @{@"1":@"11", @"2":@"22", @"3":@"33"};
    NSArray *keyArr = [dic allKeys];
    for (int i = 0; i < keyArr.count; i++) {
          //             
          NSString *key = keyArr[i];
          NSString *value = dic[key];
          NSLog(@"%@", value);
    }
    
    第2種:高速遍歴例:
        :
    NSArray * arr = @[@"0", @"1", @"2", @"3", @"4", @"5"];
    for (NSString *str in arr) {
          NSLog(@"%@", str);
    }
    
        :
    NSDictionary *dic = @{@"1":@"11", @"2":@"22", @"3":@"33"};
    for (NSString *key in dic) {
          //       
          NSString *value = dic[key];
          NSLog(@"%@", value);
    }
    
  • 逆ループ:
      for (NSString *obj in [arr reverseObjectEnumerator])
    

    3つ目:NSEnumerator(列挙検索)NSEnumeratorは抽象ベースクラスであり、メソッド:-(nullable Object Type)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);
      }
    

    4つ目: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;
           }
      }];