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(标 ...
随机推荐
- hack the box -- sizzle 渗透过程总结,之前对涉及到域内证书啥的还不怎么了解
把之前的笔记搬运过来 --- 1 开了443,用smbclient建立空连接查看共享 smbclient -N -L \\\\1.1.1.1 Department Shares Operatio ...
- CSPS模拟 90
- Project Euler 55: Lychrel numbers
五十五.吕克雷尔数(Lychrel numbers) 如果我们把\(47\)翻转过来并和其自身相加,结果是\(47+74=121\)是一个回文数.并不是所有的数都可以这么快的变成回文数,比如说: \[ ...
- 一道笔试题(vue,react)
题目: vue代码 <template> <div class="colculate"> <div> <select v-model=&q ...
- Linux下安装nexus
下载地址:https://help.sonatype.com/repomanager3/download tar xf nexus-linux-3.19.1-01.tar.gz cd nexus-li ...
- php imagick 文字居中的方法
php imagick 文字居中的方法<pre> public function getwenzinfo($nickName) { $nickNamelen = mb_strlen($ni ...
- 实现 sqrt(x):二分查找法和牛顿法
最近忙里偷闲,每天刷一道 LeetCode 的简单题保持手感,发现简单题虽然很容易 AC,但若去了解其所有的解法,也可学习到不少新的知识点,扩展知识的广度. 创作本文的思路来源于:LeetCode P ...
- 小程序 数字过千 以K显示
先新建一个 wxs 文件 每一个 .wxs 文件和 <wxs> 标签都是一个单独的模块. 每个模块都有自己独立的作用域.即在一个模块里面定义的变量与函数,默认为私有的,对其他模块不可见. ...
- 创建基于OData的Web API - Knowledge Builder API, Part III:Write Model
在前两篇文章<Part I: Business Scenario> 和<Part II: Project Setup>后,可以开始真正Model的创建. 步骤如下: 1. 创建 ...
- C++中对C的扩展学习新增语法——函数重载
函数重载 1.函数重载语法 1.同一个作用域(全局作用域.命名空间作用域.类作用域) 2.参数个数不同 3.参数类型不同 4.参数顺序不同 代码实现: 当函数名字一样的时候,通过参数类型.参数个数.参 ...