IOS 开发中遍历数组的方法及比较

数组,做为一种常用的数据类型,频繁出现在编码中,其中肯定少不了对数组的遍历,本博文对数组遍历,进行一下自己的归纳,如果是大牛,一笑而过就好,互相学习,欢迎指正。

话不多说直接进入主题

首先创建一个数组

/** 获取系统的语言数组 */
NSArray *languageArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"];
  1. for 循环-C语言

因为在xCode 编译中支持C 语言, 所以第一种最常用的遍历方法就是for 循环,也是最常用的数组遍历方法。

for (int i = 0; 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] 来实现, 暂时没有出现这种需求,这个方法我也只是知道而已,并没有使用过。

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 来进行实现,在遍历大数组的时候具有很强的效率优势。

欢迎指正,共同学习。

时间: 2024-07-30 13:47:55

IOS 开发中遍历数组的方法及比较的相关文章

iOS开发中自定义字体的方法

http://www.cnblogs.com/iyou/archive/2014/05/25/3751669.html 1. 首先下载你想要设置的字体库,例如设置方正启体简体 2. 添加到工程,一定要注意勾选红色框框处,默认是不勾选的  添加以后 3.在plist文件中添加 4.现在已经添加成功了,但是要使用就必须知道FontName,用以下代码可查到 NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyName

(iOS)开发中收集的小方法

1.颜色转变成图片 - (UIImage *)createImageWithColor:(UIColor *)color {     CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);     UIGraphicsBeginImageContext(rect.size);     CGContextRef context = UIGraphicsGetCurrentContext();     CGContextSetFillColorWithCo

iOS开发中常用的参数传递方法

在iOS开发中常用的参数传递有以下几种方法: 采用代理模式 采用iOS消息机制 通过NSDefault存储(或者文件.数据库存储等) 通过AppDelegate定义全局变量(或者使用UIApplication.定义一个单例类等) 通过控制器属性传递 使用代理方式传递参数的步骤如下: 1.定义协议,协议中定义好传参时所需要的方法 2.目标视图控制器定义一个代理对象 3.源视图控制器实现协议并在初始化目标控制器时指定目标控制器的代理为其自身 4.需要传参的时候在目标窗口调用代理的协议方法

iOS开发中存储数据的方法

最近被问到一些关于iOS开发中对于数据存储的处理方式,感觉数据存储这个也是经常用到的一个功能的,有必要自己去整理和记录一下的. iOS开发中一般是有四种存储数据的方式,分别是: 1.NSUserDefaults:用来保存用户自己设置的一些属性,用户再次打开程序,或者开机后,这些信息还是存在,NSUserDefaults可以存储的类型包括NSString,NSData,NSNumber,NSDictionary,NSArray.如果要存储其他的数据类型,则需要转化为前面的一些类型,NSUSerDe

php中遍历数组的方法

参考网址:http://www.jb51.net/article/29949.htm 这三种方法中效率最高的是使用foreach语句遍历数组.从PHP4开始就引入了foreach结构,是PHP中专门为遍历数组而设计的语句,推荐大家使用.先分别介绍这几种方法 PHP中遍历数组有三种常用的方法: 一.使用for语句循环遍历数组: 二.使用foreach语句遍历数组: 三.联合使用list().each()和while循环遍历数组. 这三种方法中效率最高的是使用foreach语句遍历数组.从PHP4开

iOS开发中,数组为空的判断处理

这篇文章主要来说一下,NSArray判断是否为空需要注意的问题. 有些经验不足的开发者,在判断数组是否为空时,会简单的写成: if (array != nil) 这种形式,或者是: if (array.count != 0) 这种形式. 其实,严格来说,这两种写法,都是考虑不足并且不稳定的. 首先来说一下,二者之间的区别. array == nil 这种情况指的是这个array对象是一个nil对象,而不是一个NSArray类型对象.任何对NSArray类属性的直接调用都会导致程序crash,例如

JavaScript中遍历数组的方法

for循环 1 let arr=["A","B","C","D","E","F"]; 2 for(let i=0;i<arr.length;i++){ 3 console.log(arr[i]); 4 } for...of 遍历出数组中的每个值 1 let arr=["A","B","C","D",&q

iOS开发中一些常用的方法

1.压缩图片 #pragma mark 处理图片 - (void)useImage:(UIImage *)image { NSLog(@"with-----%f heught-----%f",image.size.width,image.size.height); float scales = image.size.height / image.size.width; //图片比例 NSLog(@"图片比例:%f",scales); UIImage * normal

IOS开发中数据持久化的几种方法--NSUserDefaults

IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefault是最简单直接的一个办法: 1)保存数据: 1 // 实例化一个NSUserDefaults单例对象 2 NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; 3 // 把一个数组array保存在key为allContact的键值