2011-10-18 9 views
7

क्या एनएसपीआरएआरई पर एनएसपी्रेडिकेट का मूल्यांकन करना संभव है, बिना एनएसपीडिकेट सरणी में ऑब्जेक्ट्स को फ़िल्टर करना शुरू कर देता है?एनएसएआरएआरई (फ़िल्टरिंग के बिना) पर एनएसपीडिकेट का मूल्यांकन करना

उदाहरण के लिए, मैं निम्नलिखित विधेय है कि बस एक सरणी में ऑब्जेक्ट की संख्या की जांच करे कहते हैं:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"count == 3"]; 
NSArray *list = [NSArray arrayWithObjects:@"uno", @"dos", @"volver", nil]; 
BOOL match = [pred evaluateWithObject:list]; 

यह दुर्घटना होगा, pred के रूप में प्राप्त करने का प्रयास करेंगे "गिनती" पहली वस्तु से कुंजी सरणी के बजाय सरणी में।

+0

ऐसा लगता है कि आपको * सूची * नहीं * @ 123 "* के साथ मूल्यांकन करना होगा। और आप SIZE ऑपरेटर का उपयोग कर सकते हैं जो * एनएसएआरएआरई * की * गिनती * विधि के बराबर है। – EmptyStack

+0

आप सही हैं, मैंने बस टाइपो – cfischer

उत्तर

13

की आकार ऑपरेटर NSPredicate जो की गिनती विधि NSArray के बराबर है का उपयोग करें।

NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF[SIZE] == 3"]; 
NSArray *list = [NSArray arrayWithObjects:@"uno", @"dos", @"volver", nil]; 
BOOL match = [pred evaluateWithObject:list]; 
+0

तय किया है कि आप इस बजाय चौराहे के मार्ग से क्यों जाएंगे? बस 'गिनती' से '3' की तुलना करें। –

+5

@ जैकोब रिलिकिन, हां। यह वास्तव में ऐसा करने का सबसे अच्छा तरीका है। लेकिन ओपी जानना चाहता था कि उसका भविष्य क्यों काम नहीं करता है, न कि सरणी की गणना की तुलना करने का सबसे आसान तरीका क्या है ;-) – EmptyStack

+0

धन्यवाद। मैंने प्रविष्टियों को हटाकर शब्दकोशों की एक सरणी फ़िल्टर करने के लिए इसका इस्तेमाल किया जहां एक कुंजी निहित और खाली सरणी थी। –

1

उदाहरण के लिए, आप तरीकों के साथ श्रेणी बना सकते हैं आप की जरूरत:

@interface NSPredicate (myCategory) 
    - (BOOL)evaluateWithArray:(id)array; 
    // other methods 
@end 

और .m फ़ाइल में इस तरह इसे लागू:

- (BOOL)evaluateWithArray:(id)array { 
    if ([array isKindOfClass:[NSArray class]]) 
     return [self evaluateWithObject:array]; 
    return NO; 
} 

आशा है, यह मदद करता है।

9

अपने विधेय प्रारूप स्ट्रिंग में [SIZE] का उपयोग कर के लिए एक वैकल्पिक यह करने के लिए है:

NSPredicate *p = [NSPredicate predicateWithFormat:@"@count = 3"]; 

@countsimple collection keypath operators में से एक है और काफी उपयोगी है। [SIZE] से इसका उपयोग करना कहीं अधिक आम है, हालांकि दोनों ठीक हैं।

संबंधित मुद्दे