Mit NSPredicate zu filtern, basierend auf mehreren Tasten (NICHT die Werte für die Schlüssel)

Habe ich Folgendes NSArray mit NSDictionary(s):

NSArray *data = [[NSArray alloc] initWithObjects:
                 [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:1], @"bill", [NSNumber numberWithInt:2], @"joe", nil],
                 [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:3], @"bill", [NSNumber numberWithInt:4], @"joe", [NSNumber numberWithInt:5], @"jenny", nil],
                 [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:6], @"joe", [NSNumber numberWithInt:1], @"jenny", nil],
                 nil];

Ich bin zu wollen, erstellen Sie eine gefilterte NSArray, die nur Objekte enthält, wo die NSDictionary mit mehreren "Schlüssel" mit NSPredicate.

Beispiel:

  • filter-array enthält nur die NSDictionary-Objekte, die Tasten "bill" und "joe" [gewünschte Ergebnis: new NSArray enthalten würde, die ersten zwei NSDictionary Objekte]
  • filter-array enthält nur die NSDictionary-Objekte, die Tasten "joe" und "jenny" [gewünschte Ergebnis: new NSArray enthalten würde, die letzten zwei NSDictionary Objekte]

Kann jemand bitte erklären Sie das format der NSPredicate um dies zu erreichen?

Bearbeiten:
Ich kann erreichen ein ähnliches Ergebnis auf die gewünschte NSPredicate mit:

NSMutableArray *filteredSet = [[NSMutableArray alloc] initWithCapacity:[data count]];
NSString *keySearch1 = [NSString stringWithString:@"bill"];
NSString *keySearch2 = [NSString stringWithString:@"joe"];

for (NSDictionary *currentDict in data){
    //objectForKey will return nil if a key doesn't exists.
    if ([currentDict objectForKey:keySearch1] && [currentDict objectForKey:keySearch2]){
        [filteredSet addObject:currentDict];
    }
}

NSLog(@"filteredSet: %@", filteredSet);

Ich mir vorstelle, NSPredicate wäre eleganter, wenn eine vorhanden ist?

InformationsquelleAutor So Over It | 2012-06-11

Schreibe einen Kommentar