Ios NSPredicate使用另一个数组筛选数组
我想使用另一个数组(这些数组的子集)过滤一个数组数组Ios NSPredicate使用另一个数组筛选数组,ios,objective-c,nsarray,nspredicate,Ios,Objective C,Nsarray,Nspredicate,我想使用另一个数组(这些数组的子集)过滤一个数组数组 NSMutableArray* y = [NSMutableArray arrayWithObjects:@"A",@"B", nil]; NSArray *array = @[ @[@"A", @"B", @"C"], @[@"A", @"B", @"E"], @[
NSMutableArray* y = [NSMutableArray arrayWithObjects:@"A",@"B", nil];
NSArray *array = @[
@[@"A", @"B", @"C"],
@[@"A", @"B", @"E"],
@[@"A", @"B", @"D"],
@[@"B", @"C", @"D"],
];
我想过滤第二个数组,使其包含同时包含“A”和“B”的项
我使用了谓词:
NSPredicate *intersectPredicate =[NSPredicate predicateWithFormat:@"ANY SELF IN %@", y];
NSArray *intersect = [array filteredArrayUsingPredicate:intersectPredicate];
但这给了我第二个数组中的所有项。我想任何人/一些人都在考虑我想要的。我尝试了所有的方法,但它没有给出任何结果。任何/Some都会给出包含A或B的所有数组 All将给出所有只有2个元素A和B的数组 通过定义自定义谓词,我们可以获得所需的结果:
NSPredicate *intersectPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
for (NSString *str in y) {
if (![evaluatedObject containsObject:str]) {
return false;
}
}
return true;
}];
NSArray *intersect = [array filteredArrayUsingPredicate:intersectPredicate];
在本例中,它实际上只考虑y数组,因为这是您为其指定NSPredicate的搜索项。