2010-12-03 18 views
5

Bunu yapmanın bir yolu var mı? Başka bir kümeden hariç tutmak istediğim öğelerim var. Setimdeki her bir öğeye girebileceğimi ve yalnızca sette filtrelenmiş setime ekleyebileceğimi biliyorum, ancak bir yüklemeyi kullanabilsem hoş olurdu.NSPredicull olarak ayarlanmış tüm öğeleri filtrelemek için filtreyi temizleyin

Hariç tutulacak öğeler kümesi, doğrudan aynı türde nesnenin bir kümesi değildir; bu bir dizi dizgidir; ve ben vasıflarından biri o dizeyi eşleşirse diğer bir deyişle .... benim ilk setinden bir şey dışlamak istiyorum:

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

bu yerine bir yüklemi yapılabilir?

cevap

6

Bu yüklem biçim dizesi çalışması gerekir:

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

uygun NSArray filtreleme yöntemi ile birleştirin. self.questions düzenli değişmez NSArray ise, bunun bir NSMutableArray ise, uygun kullanım

[self.questions filterUsingPredicate:predicate]; 

olsa bu sonuncusu dikkatli olun olurdu

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

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

benzer görünümde olacaktır, mevcut diziyi değiştirir sonuca uyacak şekilde Gerekirse, dizinin bir kopyasını oluşturabilir ve kopyasını filtreleyebilirsiniz.

Referans:
NSArray Class Reference
NSMutableArray Class Reference
Predicate Programming Guide

+0

Awesome, "NONE" mükemmel çalıştı. Kaybettiğim şey, bir Array veya Set’i diğer herhangi bir nesne gibi bir formata aktarabileceğimin farkında değildim. Teşekkürler! – GendoIkari

0

predicates with arrays'u kullanarak Apple tarafından verilen örneğe bakın. FiltrelenmişArrayUsingPredicate kullanır.

+0

ben filteredArrayUsingPredicate kullanmak gerektiğini biliyorum, ama farklı bir dizi belirli bir değeri içeriyorsa yüklem kontrol edebilirsiniz bilmiyorum. – GendoIkari

+0

Özür diler, kaşıntılı tetik parmağı. Bir 2. sorgulama ile bir alt sorgu kullanabilir misiniz, bunun gibi: http://www.answerspice.com/c119/1665179/can-an-nspredicate-search-for-an-object-within-an-array sahipli-by bir nesne-içinde-bir-dizi? – jarmod

İlgili konular