我试图用filterUsingPredicate来剔除我的NSMutableArray元素。
棘手的部分是我总是希望在数组中保留至少10个项目,无论它们是否通过了谓词测试。如下所示:
NSPredicate * cullPredicate = [NSPredicate predicateWithFormat:
@"distanceFromCurrent <= 25 OR index < 10"];
[self.myArray filterUsingPredicate:cullPredicate];
'OR指数&lt; 10'表示我想做什么......我意识到它不起作用。
这可以用谓词吗?或者我是否需要拉出另一个数组,其元素从10开始,应用过滤器,然后将其添加回原始数组?
答案 0 :(得分:5)
NSPredicate有一个-predicateWithBlock:
方法,您可以使用它来执行此操作。像这样:
NSArray *array = [[self.myArray copy] autorelease];
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
if ([array indexOfObject:evaluatedObject] < 10) return YES;
return evaluatedObject.distanceFromCurrent <= 25;
}];
[self.myArray filterUsingPredicate:predicate];
答案 1 :(得分:1)
__block int count = 0;
NSObject * object = myArray[0];
NSPredicate * predicate = [NSPredicate predicateWithBlock:^BOOL(QDItem * evaluatedObject, NSDictionary * bindings) {
if (object.price == evaluatedObject.price) {
count ++;
return YES;
}
return NO;
}];
[myArray filterUsingPredicate:predicate];
NSLog(@"%d", count); // output: 1 if return YES