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

本文介绍了Objective-C中遍历数据的四种方法:通过数组下标、使用NSEnumerator、快速枚举(os x10.5以后)以及代码块(os x 10.5以后)。示例代码包括查找用户目录下所有.jpg文件的操作。代码块枚举允许并发执行,而快速枚举按顺序执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遍历的几种方式:
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的遍历数据的几种方式,写下来是为了以后能更好的回顾,如有错误,望大家指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值