2013-06-21 43 views
8

的阵列我有以下情况:使用NSPredicate来筛选阵列

NSArray(
    NSArray(
     string1, 
     string2, 
     string3, 
     string4, 
     string5, 
    ) 
    , 
    NSArray(
     string6, 
     string7, 
     string8, 
     string9, 
     string10, 
    ) 
) 

现在我需要返回包含特定字符串数组谓语。 例如Filter包含string9的数组 - >我应该找回整个第二个数组,因为我需要处理该数组内的其他字符串。有任何想法吗?

+0

都看一下,不要回应,如果有用或任何quetions [这里](http://stackoverflow.com/questions/4559427/using-nspredicate-in -2d-arrays) – the1pawan

回答

19

只是为了完整性:它可以使用完成:

NSArray *array = @[ 
    @[@"A", @"B", @"C"], 
    @[@"D", @"E", @"F"], 
]; 

NSString *searchTerm = @"E"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF == %@", searchTerm]; 
NSArray *filtered = [array filteredArrayUsingPredicate:predicate]; 
NSLog(@"%@", filtered); 

输出:

 
(
    (
     D, 
     E, 
     F 
    ) 
) 
+0

+1,我正在使用SUBQUERY,'[NSPredicate predicateWithFormat:@“SUBQUERY(SELF,$ content,$ content == [c]%@)”,string]''但是这并没有'工作。任何指针? – Anupdas

+0

谢谢,这是一个很好的解决方案。 – DanielR

+1

@Anupdas:你几乎在那里,'@“SUBQUERY(SELF,$ content,$ content == [c]%@)。@ count> 0”'起作用。 –

1

据我所知,你不能做到这一点作为一个班轮因此而不是使用predicateWithFormat:的你应该使用predicateWithBlock:

像这样的东西应该做你想要

NSString *someString = @"Find me"; // The string you need to find. 
NSArray *arrayWithArrayOfStrings = @[]; // Your array 
[arrayWithArrayOfStrings filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSArray *evaluatedArray, NSDictionary *bindings) { 
    return [evaluatedArray indexOfObject:someString] != NSNotFound; 
}]]; 

更新内容: 马丁 - [R证明我错了:)