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 ...
随机推荐
- 双十一 VS 火车票(12306)
火车票开售了,又是一年,code了一年,咱们也该回顾回顾了. 还记得12306上线之初各种技术大牛给人家出方案,吐槽人家外包费用?我们来回顾回顾. 就园子里都过千篇文章来侃这事儿,请问有多少主题的文章 ...
- windows系统中WIN键的快捷组合
1.WIN+E 打开我的电脑(计算机) 2.WIN+D 返回桌面 当你在用聊天工具与朋友聊天时,旁边突然出现某位小伙伴,快速按下WIN+D返回到桌面就可以很好的保护你的聊天内容啦! 3 ...
- Extjs MVC学习随笔01
Extjs Mvc模式下的整个MVC框架体系即下图: 包含了Controller(实现方法层),Store(数据来源管理层),View(页面布局层).之所以用MVC我想是因为减轻针对某一页面的单一的J ...
- pip和easy_install更换使用国内源
因为论文原因,需要使用python安装一些自然语言库,但是使用pip或easy_install安装包时,总是超时(中国特色搞得事:-D),没有办法,上网查资料解决问题~~,在网上找到的方法都是说更换国 ...
- jquery总结06-动画事件04-自定义动画
.animate(params,[speed],[easing],[fn]) params,[speed],[easing],[fn]Options,Number/String,String,Func ...
- Unity3D之随心所欲的获取对象
ps 1 建立一个cube 建立一个scripts 2 scripts 赋给cube 3 在script里面直接 gameObject.SetActive (false); 就是操作当前脚本绑定 ...
- python成长之路【第十三篇】:Python操作MySQL之pymysql
对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎 ...
- gdb调试基本命令(常用)
gdb调试命令 1>. 启动gdb gdb 可执行程序的名字 2>. 查看代码 l -- 查看当前文件 -- 默认main函数 2. 查看其它文件: l 文件名:行号, 显示指定行号的上下 ...
- alter system switch logfile与alter system archive log current的区别
以前知道 ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的当前实例执行日志切换, ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中的所有实例 ...
- windows插件框架
X3C,张云贵,http://blog.csdn.net/clever101/article/details/8656720