谓词的一个常用功能就是对集合进行过滤,当程序使用谓词对集合进行过滤时,程序将会自动遍历集合元素,并根据集合元素来计算谓词的值,只有当根据某个集合元素计算谓词并返回YES时,该集合元素才会被保留下来。
NSArray 提供了如下方法使用谓词来过滤集合:
- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSArray集合,返回该集合中符合谓词条件的元素组成新集合。
NSMutableArray提供了以下方法使用谓词来过滤集合:
- (void) filterUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSMutableArray 集合,剔除该集合中不符合条件的元素。
NSSet:
-(NSSet *)filteredSetUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSSet集合,返回该集合中符合谓词条件的元素组成新集合。
- (void) filterUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSMutableSet集合,剔除该集合中不符合条件的元素。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableArray *array = [NSMutableArray arrayWithObjects: [NSNumber numberWithInt: 50], [NSNumber numberWithInt:50], [NSNumber numberWithInt:42], [NSNumber numberWithInt: 20], nil];
//创建谓词,要求该对象的值大于50
NSPredicate *pred1 = [NSPredicate predicateWithFormat: @"SELF > 50"];
//使用谓词执行过滤后,要求只剩下值大于50的集合元素
[array filterUsingPredicate: pred1];
NSLog(@"值大于50的元素: %@", array);
NSSet *set = [NSSet setWithObjects:[[FKUser alloc] initWithName: @"孙悟空“ pass: @"343"], [[FKUser alloc] initWithName: @"金角大王" pass: @"123"], nil];
//创建谓词,要求该对象的name值中包含”大王“
NSPredicate *pred2 = [NSPredicate predicateWithFormat: @"name CONTAINS '大王'"];
//执行过滤,需要一个新集合
NSSet *newSet = [set filteredSetUsingPredicate: pred2];
NSLog(@"%@",newSet);
}
return 0;
}