zoukankan      html  css  js  c++  java
  • OC循环方法推荐-块循环遍历(比for循环好用)

    最近在看一本书《Effective OC 2.0》,今天看到有个tip是OC适中循环各自优劣性,作者最终推荐此块循环。

    阅读时思考了下块循环是否方便实现内部循环终止外部循环的问题。

    于是做了如下验证,代码如下:

     1 //
     2 //  main.m
     3 //  块循环最具优势!
     4 //
     5 //  Created by LongMa on 2019/4/3.
     6 //  Copyright © 2019年. All rights reserved.
     7 //
     8 
     9 #import <Foundation/Foundation.h>
    10 
    11 int main(int argc, const char * argv[]) {
    12     @autoreleasepool {
    13         NSMutableArray *lArr1 = [NSMutableArray array];
    14         NSMutableArray *lArr2 = [NSMutableArray array];
    15         for (int i = 0; i < 10; ++i) {
    16             [lArr1 addObject:@(i)];
    17             [lArr2 addObject:@(i)];
    18         }
    19         
    20         //反向遍历
    21         //        [lArr1 enumerateObjectsWithOptions:(NSEnumerationReverse)
    22         //                                usingBlock:^(  NSNumber* obj, NSUInteger idx, BOOL * _Nonnull stop) {
    23         //                                    NSLog(@"%@,ind:%lu", obj,(unsigned long)idx);
    24         //                                    if (idx == 90) {
    25         //                                        *stop = YES;
    26         //                                    }
    27         //        }];
    28         
    29         
    30         //思考:里循环能否终止外循环?
    31         //A:可以实现!需要差异化小标和停止参数,然后在里层循环对外循环的stopOut进行操作!此时,对内循环stopIn是否操作会决定内循环是否能执行完毕。
    32         
    33         /** 2019-04-03 01:08:30.003134+0800 块循环最具优势![3176:27943] 0,ind:0
    34          2019-04-03 01:08:30.004040+0800 块循环最具优势![3176:27943] --0,ind:0
    35          2019-04-03 01:08:30.004143+0800 块循环最具优势![3176:27943] --1,ind:1
    36          2019-04-03 01:08:30.004679+0800 块循环最具优势![3176:27943] --2,ind:2
    37          2019-04-03 01:08:30.004756+0800 块循环最具优势![3176:27943] --3,ind:3
    38          2019-04-03 01:08:30.004819+0800 块循环最具优势![3176:27943] --4,ind:4
    39          2019-04-03 01:08:30.004881+0800 块循环最具优势![3176:27943] --5,ind:5
    40          2019-04-03 01:08:30.004914+0800 块循环最具优势![3176:27943] --6,ind:6
    41          2019-04-03 01:08:30.004945+0800 块循环最具优势![3176:27943] --7,ind:7
    42          2019-04-03 01:08:30.005036+0800 块循环最具优势![3176:27943] --8,ind:8
    43          2019-04-03 01:08:30.005072+0800 块循环最具优势![3176:27943] --9,ind:9 */
    44         [lArr1 enumerateObjectsUsingBlock:^(  NSNumber* obj, NSUInteger idxOut, BOOL * _Nonnull stopOut) {
    45             NSLog(@"%@,ind:%lu", obj,(unsigned long)idxOut);
    46 
    47             if (idxOut == 2) {
    48                 *stopOut = YES;
    49             }
    50 
    51             [lArr2 enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idxIn, BOOL * _Nonnull stopIn) {
    52                 NSLog(@"--%@,ind:%lu", obj,(unsigned long)idxIn);
    53                 if (idxIn == 3) {
    54                     *stopOut = YES;
    55                 }
    56             }];
    57         }];
    58         
    59         /** 2019-04-03 01:05:20.987109+0800 块循环最具优势![3020:25596] 0,ind:0
    60          2019-04-03 01:05:20.987380+0800 块循环最具优势![3020:25596] --0,ind:0
    61          2019-04-03 01:05:20.987427+0800 块循环最具优势![3020:25596] --1,ind:1
    62          2019-04-03 01:05:20.987476+0800 块循环最具优势![3020:25596] --2,ind:2
    63          2019-04-03 01:05:20.987499+0800 块循环最具优势![3020:25596] --3,ind:3 */
    64 //        [lArr1 enumerateObjectsUsingBlock:^(  NSNumber* obj, NSUInteger idxOut, BOOL * _Nonnull stopOut) {
    65 //            NSLog(@"%@,ind:%lu", obj,(unsigned long)idxOut);
    66 //            
    67 //            if (idxOut == 2) {
    68 //                *stopOut = YES;
    69 //            }
    70 //            
    71 //            
    72 //            [lArr2 enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idxIn, BOOL * _Nonnull stopIn) {
    73 //                NSLog(@"--%@,ind:%lu", obj,(unsigned long)idxIn);
    74 //                if (idxIn == 3) {
    75 //                    *stopIn = YES;
    76 //                    *stopOut = YES;
    77 //                }
    78 //            }];
    79 //            
    80 //        }];
    81         
    82         
    83     }
    84     return 0;
    85 }

    运行上面代码可见:

    可以实现!需要差异化小标和停止参数,然后在里层循环对外循环的stopOut进行操作!此时,对内循环stopIn是否操作会决定内循环是否能执行完毕。
    学无止境,快乐编码。 没有一种不经过蔑视、忍受和奋斗就可以征服的命运。
  • 相关阅读:
    HAProxy的基础配置详解
    Nginx七层负载均衡的几种调度算法
    基于PXE网络启动的Linux系统自动化安装
    centos源码编译安装新版本内核
    Linux计划任务管理
    Linux多网卡绑定(bond)及网络组(team)
    Linux逻辑卷管理(LVM)
    pandas基础操作
    subprocess
    python常用库(转)
  • 原文地址:https://www.cnblogs.com/Dast1/p/10646462.html
Copyright © 2011-2022 走看看