我有一个包含一堆字符串的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
。
答案 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];
}