使用NSPredicate iOS在NSArray中查找包含NSString的NSArray值

NSArray我只能find值:

 NSArray *arr = [NSArray arrayWithObjects:@"299-1-1", @"299-2-1", @"299-3-1", @"399-1-1", @"399-2-1", @"399-3-1", @"499-1-1", @"499-2-1", @"499-3-1", nil]; NSString *search = @"299"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",[NSString stringWithFormat:@"%@", search]]; NSArray *array = [arr filteredArrayUsingPredicate: predicate]; NSLog(@"result: %@", array); 

按预期Found Result

  result: ( "299-1-1", "299-2-1", "299-3-1" ) 

但是NSArray NSArrayNSString

 NSArray *arr = [NSArray arrayWithObjects:[NSArray arrayWithObjects:@"299-1-1", nil],[NSArray arrayWithObjects:@"399-1-1", nil],[NSArray arrayWithObjects:@"499-1-1", nil], nil]; 

什么将predicate syntax在这里?????

要在嵌套数组中search,可以在谓词中使用“ANY”运算符:

 NSArray *arr = [NSArray arrayWithObjects:[NSArray arrayWithObjects:@"299-1-1", nil],[NSArray arrayWithObjects:@"399-1-1", nil],[NSArray arrayWithObjects:@"499-1-1", nil], nil]; NSString *search = @"299"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF CONTAINS %@", search]; NSArray *array = [arr filteredArrayUsingPredicate: predicate]; NSLog(@"result: %@", array); 

输出:

 (
     (
         “299-1-1”
     )
 )

如果你想提供一个searchTerms数组,那么你需要改变你的谓词。

像这样的事情会做到这一点

 NSArray *arr = @[ @"299-1-1", @"299-2-1", @"299-3-1", @"399-1-1", @"399-2-1", @"399-3-1", @"499-1-1", @"499-2-1", @"499-3-1" ]; NSArray *searchTerms = @[ @"299", @"399" ]; NSPredicate *predicate = [NSPredicate predicateWithBlock:^ (id evaluatedObject, NSDictionary *bindings) { for (NSString *searchTerm in searchTerms) { if (NSNotFound != [evaluatedObject rangeOfString:searchTerm].location) { return YES; } } return NO; }]; NSArray *array = [arr filteredArrayUsingPredicate:predicate]; NSLog(@"result: %@", array); //#=> result: ( "299-1-1", "299-2-1", "299-3-1", "399-1-1", "399-2-1", "399-3-1" ) 
 NSArray *arr = [NSArray arrayWithObjects:[NSArray arrayWithObjects:@"299-1-1", nil],[NSArray arrayWithObjects:@"399-1-1", nil],[NSArray arrayWithObjects:@"499-1-1", nil], nil]; NSString *search = @"299"; NSMutableArray *filteredArray = [[NSMutableArray alloc] init]; for (NSArray *array in arr) { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self CONTAINS %@",search]; if([array filteredArrayUsingPredicate:predicate].count) { [filteredArray addObject:[array filteredArrayUsingPredicate:predicate]]; } } NSLog(@"%@", filteredArray);