2013-06-21 13 views
8

Ich habe folgende Situation:NSPredicate Verwendung zum Filtern Array von Arrays

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

Jetzt brauche ich ein Prädikat, das das Array zurückgibt, die eine bestimmte Zeichenfolge enthält. z.B. Filter Array, das string9 enthält -> Ich sollte das gesamte zweite Array zurückholen, weil ich die anderen Strings innerhalb dieses Arrays verarbeiten muss. Irgendwelche Ideen?

+0

Blick auf sie und sie antworten, wenn nützlich oder anyquetions [hier] (http://stackoverflow.com/questions/4559427/using-nspredicate-in -2d-arrays) – the1pawan

Antwort

19

Nur der Vollständigkeit halber: Es kann miterfolgen:

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); 

Ausgang:

 
(
    (
     D, 
     E, 
     F 
    ) 
) 
+0

+1, ich habe mit SUBQUERY daran gearbeitet, '[NSPredicate predicateWithFormat: @" SUBQUERY (SELF, $ content, $ content == [c]% @) ", string]' aber das didn ' t arbeiten. Irgendwelche Zeiger? – Anupdas

+0

danke, das ist eine großartige Lösung. – DanielR

+1

@Anupdas: Sie waren fast da, '@" SUBQUERY (SELF, $ content, $ content == [c]% @). @ Count> 0 "' funktioniert. –

1

Von dem, was ich weiß, können Sie es als nicht tun kann Einzeiler so statt predicateWithFormat: verwenden Sie predicateWithBlock:

Etwas Ähnliches verwenden sollten, sollte das tun, was Sie wollen

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; 
}]]; 

Update: Martin R erwies sich als mich falsch :)

Verwandte Themen