OC循环方法推荐-块循环遍历(比for循环好用)
最近在看一本书《Effective OC 2.0》,今天看到有个tip是OC适中循环各自优劣性,作者最终推荐此块循环。
阅读时思考了下块循环是否方便实现内部循环终止外部循环的问题。
于是做了如下验证,代码如下:
//
// main.m
// 块循环最具优势!
//
// Created by LongMa on 2019/4/3.
// Copyright © 2019年. All rights reserved.
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableArray *lArr1 = [NSMutableArray array];
NSMutableArray *lArr2 = [NSMutableArray array];
for (int i = ; i < ; ++i) {
[lArr1 addObject:@(i)];
[lArr2 addObject:@(i)];
} //反向遍历
// [lArr1 enumerateObjectsWithOptions:(NSEnumerationReverse)
// usingBlock:^( NSNumber* obj, NSUInteger idx, BOOL * _Nonnull stop) {
// NSLog(@"%@,ind:%lu", obj,(unsigned long)idx);
// if (idx == 90) {
// *stop = YES;
// }
// }]; //思考:里循环能否终止外循环?
//A:可以实现!需要差异化小标和停止参数,然后在里层循环对外循环的stopOut进行操作!此时,对内循环stopIn是否操作会决定内循环是否能执行完毕。 /** 2019-04-03 01:08:30.003134+0800 块循环最具优势![3176:27943] 0,ind:0
2019-04-03 01:08:30.004040+0800 块循环最具优势![3176:27943] --0,ind:0
2019-04-03 01:08:30.004143+0800 块循环最具优势![3176:27943] --1,ind:1
2019-04-03 01:08:30.004679+0800 块循环最具优势![3176:27943] --2,ind:2
2019-04-03 01:08:30.004756+0800 块循环最具优势![3176:27943] --3,ind:3
2019-04-03 01:08:30.004819+0800 块循环最具优势![3176:27943] --4,ind:4
2019-04-03 01:08:30.004881+0800 块循环最具优势![3176:27943] --5,ind:5
2019-04-03 01:08:30.004914+0800 块循环最具优势![3176:27943] --6,ind:6
2019-04-03 01:08:30.004945+0800 块循环最具优势![3176:27943] --7,ind:7
2019-04-03 01:08:30.005036+0800 块循环最具优势![3176:27943] --8,ind:8
2019-04-03 01:08:30.005072+0800 块循环最具优势![3176:27943] --9,ind:9 */
[lArr1 enumerateObjectsUsingBlock:^( NSNumber* obj, NSUInteger idxOut, BOOL * _Nonnull stopOut) {
NSLog(@"%@,ind:%lu", obj,(unsigned long)idxOut); if (idxOut == ) {
*stopOut = YES;
} [lArr2 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idxIn, BOOL * _Nonnull stopIn) {
NSLog(@"--%@,ind:%lu", obj,(unsigned long)idxIn);
if (idxIn == ) {
*stopOut = YES;
}
}];
}]; /** 2019-04-03 01:05:20.987109+0800 块循环最具优势![3020:25596] 0,ind:0
2019-04-03 01:05:20.987380+0800 块循环最具优势![3020:25596] --0,ind:0
2019-04-03 01:05:20.987427+0800 块循环最具优势![3020:25596] --1,ind:1
2019-04-03 01:05:20.987476+0800 块循环最具优势![3020:25596] --2,ind:2
2019-04-03 01:05:20.987499+0800 块循环最具优势![3020:25596] --3,ind:3 */
// [lArr1 enumerateObjectsUsingBlock:^( NSNumber* obj, NSUInteger idxOut, BOOL * _Nonnull stopOut) {
// NSLog(@"%@,ind:%lu", obj,(unsigned long)idxOut);
//
// if (idxOut == 2) {
// *stopOut = YES;
// }
//
//
// [lArr2 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idxIn, BOOL * _Nonnull stopIn) {
// NSLog(@"--%@,ind:%lu", obj,(unsigned long)idxIn);
// if (idxIn == 3) {
// *stopIn = YES;
// *stopOut = YES;
// }
// }];
//
// }]; }
return ;
}
运行上面代码可见:
可以实现!需要差异化小标和停止参数,然后在里层循环对外循环的stopOut进行操作!此时,对内循环stopIn是否操作会决定内循环是否能执行完毕。
OC循环方法推荐-块循环遍历(比for循环好用)的更多相关文章
- php循环方法实现先序、中序、后序遍历二叉树
二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree). <?php class Node { public $v ...
- javascript 终极循环方法for... of ..推荐
js目前有很多的循环方法,如for, forEach, for .. in, for of 等等,而在ES6里面,我们又增加了一些数据结构,比如set,map,Symbol等. 那么我们该选取哪一 ...
- js------10种循环方法
let arr = [{a:1},{a:2},{a:3},{a:4},{a:5}]; // 1.while循环 let sum = 0; let num = 1; while(num <= 1) ...
- 如果要遍历除了for循环,你还知道什么?——JavaScript的各种遍历方式
如果要遍历除了for循环,你还知道什么?——JavaScript的各种遍历方式 这是曾经面试中的一道题目,当时的我用现在很潮的话讲,整个人是懵比的,我呆呆的说了句,我好像只知道for循环啊.后来回过神 ...
- angular.foreach 循环方法使用指南
angular有自己的生命周期.循环给一个 angular监听的变量复值时.最好还是用angular自带的循环方法.“angular.foreach” },{a:}]; angular.forEach ...
- JavaScript里的循环方法总结
JavaScript诞生已经有20多年了,我们一直使用的用来循环一个数组的方法是这样的: for (var index = 0; index < myArray.length; index++) ...
- Javascript/jQuery关于JSON或数组集合的几种循环方法
JavaScript遍历JSON或数组集合: /** * 根据json数据生成option树形控件 * 如果有children节点则自动生成树形数据 * @param {JSON} data * @p ...
- 二叉树(前序,中序,后序,层序)遍历递归与循环的python实现
二叉树的遍历是在面试使比较常见的项目了.对于二叉树的前中后层序遍历,每种遍历都可以递归和循环两种实现方法,且每种遍历的递归实现都比循环实现要简洁.下面做一个小结. 一.中序遍历 前中后序三种遍历方法对 ...
- JavaScript里的循环方法之forEach,for-in,for-of
JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标 ...
随机推荐
- [考试反思]1018csp-s模拟测试79:荒谬
对,如果你想把第5名粘进来,那么图片就是这么夸张. 然而和我并没有什么关系,实在是太菜了. 但是还是想吐槽出题人是真心没良心啊...做了达哥的良心题之后眼光极其挑剔 这套题的部分分设置非常愚蠢,唯一一 ...
- 卡特兰数&&prufer序列&&BSGS水题集
首先说一下BSGS的一个坑点: 解方程A^x≡B(mod p) 需要特判一个东西=>A%p==B%p==0? 如果相等的话puts("1")反之则无解. 因为如果A%p=0, ...
- js清除节点内容(改变标签元素)
<!DOCTYPE HTML><html> <head> <meta http-equiv="Content-Type" c ...
- 正睿OI集训游记
什么嘛....就是去被虐的... 反正就是难受就是了.各种神仙知识点,神仙题目,各式各样的仙人掌..... 但是还是学会了不少东西...... 应该是OI生涯最后一次集训了吧.... 这次的感言还是好 ...
- 参与国际化项目需遵循的java命名规范
笔者最近帮助一些朋友应聘远程工作(一般都是一些国外的项目),国外的项目负责人一般都会要求提供github账号或者一些源代码,很多朋友在这一关就被筛选掉了,其中不乏一些我认为技术非常厉害的行业大牛,他们 ...
- UiPath之Word转换为PDF
前几天在手机上看到其他的文章,里面提到如何将Word转换为PDf,在UiPath的ManagePackage中,下载一个WordToPDF的包, 我按照上面的方法试着做了一下,但是在转换的时候很不稳定 ...
- 关于BootStrap的相关介绍
一.Bootstrap Bootstrap的官网:www.bootcss.com 1.响应式布局 Responsive web page 响应式/自适应的网页 可以根据浏览器设备的不同(pc,pad, ...
- docker监控容器
Weave Scope: 是能够自动生成一张 Docker 容器web动态图的监控软件,能够让我们直观地理解.监控和控制容器. 监控一台主机: 第一步:安装 [root@localhost ~]# c ...
- C#索引器与数组的区别
1.索引器的索引值类型不限定为整数 2.索引器允许重载 3.索引器不是一个变量 4.索引器以函数签名方式this标识,而属性采用名称来标识,名称可以任意 5.索引器不能使用static来进行声明,属性 ...
- 怎样在PaaS平台上搭建一个会自动关闭的会议室
首相得解释一下,什么叫做会自动关闭的会议室.我们的会议室是存在一个会议预定系统的,一般情况下,我们需要开会的时候,需要先抢占会议室.等待要开会的时候,去会议室里边开会,如果里边有别人,我们可以告诉他们 ...