IOS开发_中遍历数组的方法及比较
数组,做为一种常用的数据类型,频繁出现在编码中,其中肯定少不了对数组的遍历,本博文对数组遍历,进行一下自己的归纳,如果是大牛,一笑而过就好,互相学习,欢迎指正。
话不多说直接进入主题
首先创建一个数组
/** 获取系统的语言数组 */
NSArray *languageArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"];
- for 循环-C语言
因为在xCode 编译中支持C 语言, 所以第一种最常用的遍历方法就是for 循环,也是最常用的数组遍历方法。
for (int i = ; i < languageArray.count; i++) {
NSLog(@"languageArray[%d] = %@", i, languageArray[i]);
}
得到的打印结果是 languageArray[对应下表] = 数组中的值
这种方法简单,效率一般,优点有三种,
第一、方便针对下标进行处理;
第二、可以方便的进行反向遍历;
第三、两个for 循环嵌套时,可以进行冒泡排序,冒泡排序的代码,就不附缀了。
2.for...in 循环,也有称为快速for循环 (Objective-C-2.0 时出的方法)
for (id object in languageArray) {
NSLog(@"languageArray=%@", object);
}
这种遍历方法,号称是效率第一,也是我编码中的首选,较比for 循环而言,更简洁,但是需要一个外部变量来实现,不便之处,暂时遇见过三种:
第一、如果代码需求要求要知道下标,这个方法就会显的不再那么好用。
第二、反向遍历需要通过 [languageArray reverseObjectEnumerator] 来实现, 暂时没有出现这种需求,这个方法我也只是知道而已,并没有使用过。
第三、for... in内部无法对数组进行删除操作,暂时只遇见这种问题,解决方法是用for 循环替代。
3、iOS 应该是在2011年的开发者大会上推出了 block块的用法,到目前为止,已经有很多年头,业界对 block块的评价褒贬不一, 一名外国程序员还专门创立了一个网站称为FuckBlock, 以此来抨击iOS 推出的block, 但是,block 在优化代码提高编译效率方面的确是很赞的,在数组遍历中有两种block :【enumerateObjectsUsingBlock】 和 【enumerateObjectsWithOptions:usingBlock】,前者一般用于正序遍历,后者用于反向遍历。
首先是【enumerateObjectsUsingBlock】
[languageArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"idx=%d, id=%@", idx, obj);
}];
【enumerateObjectsUsingBlock】block里面的参数包括object,下标以及是否停止遍历而 【enumerateObjectsWithOptions:usingBlock】多传了一个指定遍历顺序的参数
[languageArray enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"idx=%d, id=%@", idx, obj);
}];
【enumerateObjectsWithOptions:usingBlock】 在遍历小数组的时候不推荐使用,效率差距不是很明显,但是在遍历大型数组时建议使用该block 块, 在该block 底层使用GCD 来处理并发执行事宜,所以应该有用到 dispatch group 来进行实现,在遍历大数组的时候具有很强的效率优势。
欢迎指正,共同学习。
IOS开发_中遍历数组的方法及比较的更多相关文章
- php中遍历数组的方法
参考网址:http://www.jb51.net/article/29949.htm 这三种方法中效率最高的是使用foreach语句遍历数组.从PHP4开始就引入了foreach结构,是PHP中专门为 ...
- E5中遍历数组的方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Javascript中遍历数组方法的性能对比
Javascript中常见的遍历数组的方法 1.for循环 for(var i = 0; i < arr.length; i++) { // do something. } 2.for循环的改进 ...
- javascript 中遍历数组的简单方法
在Javascript中有自带方便遍历数组的方法(此方法非彼方法不要误会哦): 1 .利用for( index in array ){}; 2.利用 array.forEach( function(e ...
- iOS开发 Xcode8中遇到的问题及改动
iOS开发 Xcode8中遇到的问题及改动 新版本发布总会有很多坑,也会有很多改动. 一个一个填吧... 一.遇到的问题 1.权限以及相关设置 iOS10系统下调用系统相册.相机功能,或者苹果健康 ...
- iOS开发——基础篇——iOS开发 Xcode8中遇到的问题及改动
iOS开发 Xcode8中遇到的问题及改动 新版本发布总会有很多坑,也会有很多改动. 一个一个填吧... 一.遇到的问题 1.权限以及相关设置 iOS10系统下调用系统相册.相机功能,或者苹果健康 ...
- iOS开发Swift篇—(十)方法
iOS开发Swift篇—(十)方法 一.简单说明 跟其他面向对象语言一样,Swift中的方法可以分为2大类: (1)实例方法(Instance Methods) 在OC中,实例方法以减号(-)开头 ( ...
- IOS开发-几种截屏方法
IOS开发-几种截屏方法 1. UIGraphicsBeginImageContextWithOptions(pageView.page.bounds.size, YES, zoomSc ...
- JaveScript遍历数组的方法
JaveScript遍历数组的方法 第一种:for循环 遍历出数组的每个值 let arr = [1, 2, 3, 4, 5, 6, 7, 8]; for (let i = 0; i < arr ...
随机推荐
- 基于springMVC+angular+bootstrap+mysql的简易购物网站搭建
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=10&cad=rja& ...
- BASH比较大小
- TCP/IP基础概念及通信过程举例
TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...
- Using Call_Form in Oracle D2k
Using Call_Form in Oracle D2k CALL_FORM examples/* Example 1:** Call a form in query-only mode.*/BEG ...
- 微信小程序-视图数据绑定
数据绑定 在逻辑层设置数据例如: Page({ data: { message: 'Hello MINA!' } })//设置了一个属性,名称是message 值为Hello MINA! 在视图显示数 ...
- hadoop2.7.3配置文件中过时的属性
过时的属性:Deprecated Properties 该列表保存于:hadoop-2.7.3-src\hadoop-common-project\hadoop-common\src\site\mar ...
- Linux C相关基础
系统求助 man 函数名 man 2 函数名 - 表示函数是系统调用函数 man 3 函数名 - 表示函数是C的库函数 eg:man fread man 2 w ...
- vim添加未识别文件类型
这里用.c的文件格式来识别.nc文件 $ cd ~/.vim/ftdetect $ vim nc.vim # nc.vim内容 # au BufRead,BufNewFilE *.nc set fil ...
- springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传
总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...
- zend studio 10破解/汉化
http://blog.csdn.net/qq1355541448/article/details/16807429