其他答案没有任何问题。但是,我想建议一种不同的方法来创建谓词:使用块。
NSArray *testArray = @[@"abc", @"cba", @"cda"];
NSArray *letters = @[@"a", @"b", @"c"];
NSPredicate *p = [NSPredicate predicateWithBlock:^BOOL(id string, NSDictionary *bindings) {
for ( NSString *letter in letters ) {
NSStringCompareOptions options = NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch;
if ( ! [string rangeOfString:letter options:options].length ) {
return NO;
}
}
return YES;
}];
NSArray *result = [testArray filteredArrayUsingPredicate:p];
只是为了好玩,您还可以使用子查询编写谓词。这效率较低,但它是较短的解决方案。
NSArray *testArray = @[@"abc", @"cba", @"bcda"];
NSArray *letters = @[@"a", @"b", @"c"];
NSPredicate *p = [NSPredicate predicateWithFormat:@"SUBQUERY(%@, $a, self CONTAINS[cd] $a)[SIZE] == %d", letters, letters.count];
NSArray *result = [testArray filteredArrayUsingPredicate:p];