使用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
NSArray
与NSString
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);