2014-02-09 6 views
0

У меня есть NSArray, который содержит кучу строк. Некоторые элементы в NSArray капитализируются; некоторые - нет. Я хочу удалить все элементы, которые капитализируются из NSArray.удалить заглавные буквы из NSArray

Мой код ниже. Если у вас есть 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»с выражением несовместимыми type 'void'' –

+0

Я исправил это. Я просто попробовал и, похоже, сработал. – EricS

+0

удивительный. Спасибо за вашу помощь! –

Смежные вопросы