2014-02-09 79 views
0

我有一個包含一串字符串的NSArray。 NSArray中的一些項目是大寫的;有些不是。我想從NSArray中刪除所有大寫的項目。刪除NSArray的大寫項目

我的代碼如下。如果你有一個mac,你可以運行這個代碼,因爲所有的mac都加載了我加載到NSArray中的文件。

// Read in a file as a huge string (ignoring the possibility of an error) 
     NSString *wordString = [NSString stringWithContentsOfFile:@"/usr/share/dict/words" encoding:NSUTF8StringEncoding error:NULL]; 
// Break it into an array of strings 
     NSArray *words = [wordString componentsSeparatedByString:@"\n"]; 

例如,如果我的NSArray包含以下兩個項目['wolf','Wolf']我想Wolf被刪除。

回答

1

這是一種方法。不一定是最好的/最快的:

NSCharacterSet *uppercaseSet = [NSCharacterSet uppercaseLetterCharacterSet]; 
NSMutableArray *itemsToDelete = [NSMutableArray new]; 
for (NSString *word in words) { 
    if ((word.length > 0) && [uppercaseSet characterIsMember:[word characterAtIndex:0]]) 
    [itemsToDelete addObject:word]; 
} 

NSMutableArray *newArray = [words mutableCopy]; 
[newArray removeObjectsInArray:itemsToDelete]; 

看了上面的代碼後,我意識到下面的代碼會快得多。原來是約40倍的速度更快,因爲它不是從數組刪除項目,只是追加他們來說,這是一個更快的操作:

NSCharacterSet *uppercaseSet = [NSCharacterSet uppercaseLetterCharacterSet]; 
NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:words.count]; 

for (NSString *word in words) { 
    if ((word.length > 0) && ![uppercaseSet characterIsMember:[word characterAtIndex:0]]) 
    [newArray addObject:word]; 
} 
+0

我得到了以下錯誤:'初始化「的NSArray * _strong」與不兼容的表達鍵入'void'' –

+0

我修正了這個問題。我只是試了一下,它似乎工作。 – EricS

+0

真棒。謝謝你的幫助! –