我想使用另一个数组过滤数组数组,该数组是这些数组的子集。
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,但它什么都没有。
答案 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];