您的位置:首页 > 移动开发 > Objective-C

Objective-C遍历数据的几种方式

2015-08-29 11:35 447 查看
遍历的几种方式:

1、通过索引,如通过数组下标来遍历数组 -objectAtIndex()

2、使用NSEnumerator容器来存放数据项,通过nextObject来获取下一个数据

3、使用快速枚举(os x10.5以后)

4、最新的代码块方法(os x 10.5以后)

第一种通过下标的方式来遍历数据,这种方式太简单,这里不显示示例代码

第二种示例代码:

查找用户目录下所有的.jpg文件:

//使用NSEnumerator
void getFile(){
    NSFileManager *manager;
    //获取NSFileManager对象,使用默认的Manager
    manager = [NSFileManager defaultManager];   

    NSString *home;
    //获取主目录,~代表主目录,stringByExpandingTildeInPath将~替换成当前用户的主目录
    home = [@"~" stringByExpandingTildeInPath]; 

    //将路径传入到文件管理器中,得到在当前路径中的所有文件的目录,方便接下来进行比较
    NSDirectoryEnumerator *dirnum;

    NSMutableArray *files;  //用于存放匹配成功的文件名
    files = [NSMutableArray arrayWithCapacity: 42];

    NSString *filename;     //用于临时存放一个当前目录下的一个文件的名字
    while(filename = [dirnum nextObject])
    {
        if([[filename pathExtension] isEqualTo:@"jpeg"]) {
            //pathExtension输出文件扩展名
            [files addObject:filename]; //匹配成功
        }
    }

    NSEnumerator *fileenum;
    fileenum = [files objectEnumerator];   //将获取到匹配的文件名转换成可用于遍历的容器中
    while(filename = [fileenum nextObject]) {//进行遍历
        NSLog(@"%@",filename);
    }
}


第三种使用快速枚举(针对os x10.5以后)

简单示例:

for(NSString *string in array)
{
    NSLog(@"I found %@",string);
}


查找用户目录下所有的.jpg文件:

//通过快速枚举方法
void getFile() {
    NSFileManager *manager = [NSFileManager defaultManager];

    NSString *home;
    home = [@"~" stringByExpandingTildeInPath];

    NSMutableArray *files;
    files = [NSMutableArray arrayWithCapacity:42];

    for(NSString *fileName in [manager enumeratorAtPath:home]) {
        if([[fileName pathExtension] isEqualToString:@"jpg"]){
            [files addObject:fileName];
        }
    }

    for(NSString *fileName in files){
        NSLog(@"%@",fileName);
    }
}


第四种通过代码块来实现,苹果公司添加了一个能在NSArray中通过代码块枚举对象的方法,代码如下:

-(void)enumerateObjectsUsingBlock:(void (^)(id obj,NSUInteger index,BOOL *stop))block;


我们仿照快速枚举

for(NSString *string in array)
{
    NSLog(@"I found %@",string);
}


来重写一下上面的给出的代码块,得到如下代码:

[array enumerateObjectsUsingBlock:^(NSString *string,NSUInteger index,BOOL *stop){
    NSLog(@"I found %@",string);
}];


代码块和快速枚举的不同:通过代码块可以让循环操作并发执行,而通过快速枚举执行操作要一项一项的线性完成

以上就是我自己理解的Objective-C的遍历数据的几种方式,写下来是为了以后能更好的回顾,如有错误,望大家指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: