您的位置:首页 > 其它

OC里面的集中数组遍历方法

2014-12-01 20:55 148 查看
OC是兼容C语言的,所以我们要说的第一张遍历方法就是最原始,最常用的for循环

for (int i =0;i < array.count;i++)

{

Nslog(@"array is %@",array[i]);

}

这个方法最普遍,用的非常多,总体说起来效率很一遍,但是有下标,好用。

而且可以反遍历。

OC 的1.0里面 NSEnumerator也可以进行遍历

NSArray *array = [[NSArray
alloc] init];
NSEnumerator *enume = [array
objectEnumerator];
id object;
while ((object = [enume
nextObject]) != nil) {
NSLog(@"array is %@", object);
}
这个方法的好处是和遍历 NSDictionary 以及 NSSet的方法基本一样,而且反遍历的话可以用[array
reverseObjectEnumerator]这个方法,缺点就是没有下标,取中间值的话会不好操作。
OC 2.0的时候有了一个快速遍历的方法

for (id object
in array)
{
NSLog(@"array is %@",object);
}
此方法效率很高,在如果不需要下标的全遍历的情况下,这个方法,轻便好用,首选。反遍历依旧是[array reverseObjectEnumerator]
在block出来之后,又出来一个enumerateObjectsUsingBlock: 的方法,我也是今天看到这个方法,没有见到过,才好好看了看这个方法

[array enumerateObjectsUsingBlock:^(id obj,
NSUInteger idx, BOOL *stop){
NSLog(@"array is %d is %@", idx, obj);
}];
可以看到这个方法里面有下标,有取值,而且还有是否停止。
反遍历的话,还有另外一个方法,
[array enumerateObjectsWithOptions:NSEnumerationReverse
usingBlock:^(id obj,
NSUInteger idx, BOOL *stop){
NSLog(@"array is %d is %@",idx, obj);
}];
这里是多了一个参数,可以选择正反遍历。而且如果选择了正反方向的话,底层通过GCD来处理事件,并不保证按照顺序触发,但是效率是一流的。

总结一下,在不需要下标的时候,用那个快速遍历是极好的,那么在有需要随时停止的时候,那么block的这个方法是极好的。
以后就不要在看到for循环这样的耗性能的方法了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: