2010-12-03 11 views
5

क्या ऐसा करने का कोई तरीका है? मेरे पास आइटम का एक सेट है जिसे मैं दूसरे सेट से बाहर करना चाहता हूं। मुझे पता है कि मैं अपने सेट में प्रत्येक आइटम के माध्यम से लूप कर सकता हूं और इसे अपने फ़िल्टर किए गएसेट में जोड़ सकता हूं अगर यह दूसरे सेट में नहीं है, लेकिन अगर मैं भविष्यवाणी कर सकता हूं तो यह अच्छा होगा।किसी अन्य सेट में मौजूद सभी आइटम को फ़िल्टर करने के लिए NSPredicate

बाहर करने के लिए वस्तुओं का सेट सीधे उसी प्रकार के ऑब्जेक्ट का सेट नहीं है; यह तारों का एक सेट है; और मैं अपने पहले सेट में से कुछ भी बाहर करने के लिए करता है, तो विशेषताओं में से एक है कि स्ट्रिंग से मेल खाता .... दूसरे शब्दों में हैं:

NSMutableArray *filteredArray = [NSMutableArray arrayWithCapacity:self.questionChoices.count]; 

BOOL found; 

for (QuestionChoice *questionChoice in self.questionChoices) 
{ 
    found = NO; 

    for (Answer *answer in self.answers) 
    { 
     if ([answer.units isEqualToString:questionChoice.code]) 
     { 
      found = YES; 
      break; 
     } 
    } 

    if (!found) 
     [filteredArray addObject:questionChoice]; 
} 

इस बजाय एक विधेय के साथ किया जा सकता है?

उत्तर

6

यह विधेय प्रारूप स्ट्रिंग काम करना चाहिए:

@"NONE %@.units == code", self.answers 

उचित NSArray छानने विधि के साथ यह संयुक्त करें। यदि self.questions एक नियमित रूप से अपरिवर्तनीय NSArray है, ऐसा लगता है

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NONE %@.units == code", self.answers] 

NSArray *results = [self.questions filteredArrayUsingPredicate:predicate]; 

कुछ यदि यह एक NSMutableArray है, उचित उपयोग होगा

[self.questions filterUsingPredicate:predicate]; 

कि पिछले एक यद्यपि से सावधान रहें लगेगा, यह मौजूदा सरणी को संशोधित करता है परिणाम फिट करने के लिए। आप सरणी की एक प्रति बना सकते हैं और उस से बचने के लिए प्रतिलिपि फ़िल्टर कर सकते हैं, यदि आपको आवश्यकता हो।

संदर्भ:
NSArray Class Reference
NSMutableArray Class Reference
Predicate Programming Guide

+0

बहुत बढ़िया, "नहीं" पूरी तरह से काम किया। जो मैं याद कर रहा था वह यह था कि मुझे एहसास नहीं हुआ कि मैं सिर्फ एक ऐरे में जा सकता हूं या भविष्यवाणी प्रारूप में सेट कर सकता हूं जैसे कि आप किसी अन्य वस्तु को करेंगे। धन्यवाद! – GendoIkari

0

predicates with arrays का उपयोग करने के लिए ऐप्पल द्वारा दिए गए उदाहरण को देखें। यह filteredArrayUsingPredicate नियोजित करता है।

+0

मुझे पता है कि मैं filteredArrayUsingPredicate उपयोग करने की आवश्यकता है, लेकिन मैं नहीं जानता कि कैसे एक विधेय जांच कर सकते हैं एक अलग सरणी एक निश्चित मूल्य में शामिल है। – GendoIkari

+0

माफी, खुजली उंगली उंगली। क्या आप दूसरी भविष्यवाणी के साथ उप-क्वेरी का उपयोग कर सकते हैं, इस तरह की: http://www.answerspice.com/c119/1665179/can-an-nspredicate-search-for-an-object-within-an-array स्वामित्व-दर-एक-वस्तु में एक और सरणी? – jarmod

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