मैं निम्नलिखित है NSArray युक्त NSDictionary (ओं):NSPredicate का उपयोग एकाधिक कुंजियों (नहीं कुंजी के लिए मान) के आधार पर फ़िल्टर करने के लिए
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];
मैं फ़िल्टर किए गए NSArray बनाने के लिए है कि केवल ऑब्जेक्ट हैं चाहने रहा जहां NSDictionary NSPredicate का उपयोग कर एकाधिक 'कुंजी' से मेल खाता है।
उदाहरण के लिए:
- फ़िल्टर सारणी केवल NSDictionary वस्तुओं है कि कुंजी "बिल" और "जो" को रोकने के लिए [वांछित परिणाम: नया NSArray पहले दो NSDictionary वस्तुओं होते हैं]
- फ़िल्टर सारणी केवल NSDictionary वस्तुओं है कि कुंजी "जो" और "जेनी" को रोकने के लिए:
क्या कोई इसे प्राप्त करने के लिए एनएसपीडिकेट के प्रारूप को समझा सकता है?
संपादित करें:
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);
मैं कल्पना कर रहा हूँ NSPredicate और अधिक सुरुचिपूर्ण, यदि कोई मौजूद होगा: मैं वांछित NSPredicate लिए एक समान परिणाम का उपयोग कर प्राप्त कर सकते हैं?
: - "(NSArray *) allKeys"
कोड यदि आप उपसर्ग @ के साथ यह नहीं लिखते तो शब्दकोश सिर्फ एक कुंजी है कि "allKeys" विधि के बजाय के लिए दिखेगा वह केवल 2 विकल्प हार्डकोडिंग के बजाय NSCompoundPredicate के '+ औरPredicateWithSubpredicates: 'का उपयोग भी कर सकता था। –
धन्यवाद। मैं इसे सुबह में कोशिश करूंगा। कोड ऐसा दिख रहा है जो मैं चाहता हूं! –
ठीक है .. आखिरकार इस पर वापस आ गया। कोड काम करता है, बस यह सुनिश्चित करने की आवश्यकता है कि यह एटोक-एड है: 'एनएसएआरएआरई * बिल एंड जो = [[एनएसएआरएआरए ऑलोक] initWithArray: [एनएसएआरएआरए सरणी विथअरे: [डेटा फ़िल्टर किया गया एरियाउजिंग: [एनएसपीडिकेट भविष्यवाणी करेंथफॉर्मैट: @ "% @ स्वयं @ @ सभी की और% @ इन स्वयं। @ ऑलकेस ", @" बिल ", @" जो "]]]]; –