过滤一个数组:谓词?块?

时间:2013-04-18 20:40:47

标签: nsarray objective-c-blocks nspredicate

我正在寻找在第二次治疗之前过滤阵列的解决方案,无需进一步测试即可应用。

假设我要从给定文件夹中删除大于500K的所有文件。我可以:

1)获取一个枚举器,然后为每个项目测试大小并删除大文件; 2)获取一个枚举器,过滤它,然后删除所有剩余的文件。

我想知道如何实施解决方案2.我正在考虑另一种治疗方法(这次没有删除),如图像缩减,可以多次应用。在每个循环中,文件大小减小,枚举器总是变小,直到它为空。此时,治疗结束了。

但是怎么做?我见过许多谓词的例子,比如@“SELF包含[c]'e'”(带有小的变化)但从来没有SELF.size> 500000 ...

我认为解决方案可能是一个障碍,但我必须承认我完全迷失了......

请帮忙!

2 个答案:

答案 0 :(得分:6)

如何使用+[NSPredicate predicateWithBlock:]工厂方法?您将为要保留的项目返回YES(例如,小于500000字节/字符/ ...)。

答案 1 :(得分:3)

NSPredicate *predicate = [NSPredicate predicateWithBlock: ^BOOL (id evaluatedObject, NSDictionary *bindings){
NSDictionary *fileDic =[_fm attributesOfItemAtPath:[evaluatedObject path] error: nil];
unsigned long long testSize = [[fileDic valueForKey:@"NSFileSize"]longLongValue];
return testSize > 500000;
}];