从NSArray中删除大写项目

时间:2014-02-09 02:20:41

标签: objective-c 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 个答案:

答案 0 :(得分: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];
}