2011-02-17 10 views
18

मैं एक्सटेंशन के एक सेट में समाप्त होने वाली फ़ाइलों के लिए एक अनुमानित जांच का उपयोग करके एक सरणी फ़िल्टर करने का प्रयास कर रहा हूं। मैं यह कैसे कर सकता हूं?NSPredicate कई फ़ाइलों के साथ समाप्त होता है

के करीब कुछ '% end endwithwith% @' काम करेगा? धन्यवाद!

NSArray * dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectoryPath error:nil]; 
NSArray * files = [dirContents filteredArrayUsingPredicate: 
    [NSPredicate predicateWithFormat:@"self CONTAINS %@", 
    [NSArray arrayWithObjects:@".mp4", @".mov", @".m4v", @".pdf", @".doc", @".xls", nil] 
    ]]; 

उत्तर

63

आप नहीं करना चाहते हैं एक सरणी के लिए होता है, आप में चाहते हैं। आप आदर्श रूप से पथ एक्सटेंशन द्वारा फ़िल्टर करना चाहते हैं। तो

NSArray *extensions = [NSArray arrayWithObjects:@"mp4", @"mov", @"m4v", @"pdf", @"doc", @"xls", nil]; 
NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectoryPath error:nil]; 
NSArray *files = [dirContents filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"pathExtension IN %@", extensions]]; 
+4

+1 मेरे उत्तर से काफी बेहतर है। मुझे विश्वास नहीं है कि मैंने इस बारे में नहीं सोचा था। आप के लिए यश। –

+0

बहुत बढ़िया! धन्यवाद! –

+0

+1, वास्तव में बहुत बढ़िया! – EmptyStack

3

संपादित मार्टिन जवाब अब तक इस एक से बेहतर है। उसका सही जवाब है।


ऐसा करने के कुछ तरीके हैं। शायद सबसे सरल सिर्फ एक विशाल या विधेय के निर्माण के लिए किया जाएगा:

NSArray *extensions = [NSArray arrayWithObjects:@".mp4", @".mov", @".m4v", @".pdf", @".doc", @".xls", nil]; 
NSMutableArray *subpredicates = [NSMutableArray array]; 
for (NSString *extension in extensions) { 
    [subpredicates addObject:[NSPredicate predicateWithFormat:@"SELF ENDSWITH %@", extension]]; 
} 
NSPredicate *filter = [NSCompoundPredicate orPredicateWithSubpredicates:subpredicates]; 

NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectoryPath error:nil]; 
NSArray *files = [dirContents filteredArrayUsingPredicate:filter]; 

यह एक विधेय है कि के बराबर है पैदा करेगा:

SELF ENDSWITH '.mp4' OR SELF ENDSWITH '.mov' OR SELF ENDSWITH '.m4v' OR .... 
संबंधित मुद्दे