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的搜索项。