2014-02-09 35 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

真棒。谢谢你的帮助! –