NSPredicate使用另一个数组过滤数组数组

时间:2014-08-16 08:21:51

标签: ios objective-c nsarray nspredicate

我想使用另一个数组过滤数组数组,该数组是这些数组的子集。

   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];

但是这给了我第二个数组中的所有项目。我想ANY / SOME正在考虑(A || B)我想要(A&& B)。我尝试了ALL,但它什么都没有。

1 个答案:

答案 0 :(得分:3)

Any / Some 会给出包含A或B的所有数组。

所有会给出所有只有2个元素的数组A&乙

通过定义自定义谓词,我们可以获得所需的结果:

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];