[英]Find values in NSArray having NSArray with NSString using NSPredicate iOS
僅使用NSArray
我可以找到以下值:
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
是什么?
要搜索嵌套數組,可以在謂詞中使用“ 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" ) )
如果要提供一組searchTerm,則需要更改謂詞。
這樣的事情會做到的
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.