2013-07-23 9 views
7

У меня есть NSArray, заполненный 200 000 слов, и я не знаю длины каждого слова. Мне нужно знать, какая максимальная длина слова содержится в этом массиве.Поиск самой длинной строки в NSArray

Например, если мой массив { «собака», «человек», «удивительный»} Максимальная длина слова, содержащегося в этом массиве будет 7 («удивительный»)

Как бы я сделай это?

+1

Существует не техника быстрее, чем просто итерация по массиву и поиск самого длинного элемента. –

+0

@HotLicks см. Ответ Рамы – MZimmerman6

+0

@ MZimmerman6 - Я готов поспорить, что этот подход медленнее. –

ответ

23

Кроме того, все методы, которые предполагают Перебор массива, вы можете легко сделать это с помощью valueForKeyPath:, используя оператор @max коллекции:

NSNumber* maxLength= [array valueForKeyPath: @"@max.length"]; 
+0

Мне любопытно, как это работает. Можете ли вы объяснить немного больше? – BlueMeanie

+1

@BlueMeanie Это возможно, потому что все коллекции реализуют некоторые операторы, такие как max (спираль пропущена, чтобы избежать кавычек), avg, count и т. Д. Вот ссылка: http://developer.apple.com/library/ios/# DOCUMENTATION/Cocoa/Conceptual/KeyValueCoding/Articles/CollectionOperators.html –

12

Вы можете попробовать этот

Чтобы найти самую длинную длину слова

NSArray *wordList = [NSArray arrayWithObjects:@"dog", @"person", @"amazing", nil]; 

int maxLen, strLen; 
for(NSString *str in wordList) { 
    strLen = [str length]; 
    if (strLen > maxLen) { 
     maxLen = strLen; 
    } 
} 
NSLog(@"Longest Word Length = %d", maxLen); 

Чтобы найти длинный est word

NSArray *wordList = [NSArray arrayWithObjects:@"dog", @"person", @"amazing", nil]; 

NSString *longestWord = nil; 
for(NSString *str in wordList) { 
    if (longestWord == nil || [str length] > [longestWord length]) { 
     longestWord = str; 
    } 
} 
NSLog(@"Longest Word = %@", longestWord); 
+0

Быстрое перечисление, по-видимому, происходит быстрее, чем кодирование с ключом, но я бы, возможно, сохранил самую длинную длину * вместо самой длинной строки *, чтобы избежать этого '[longestWord length] 'вычисляется многократно. –

+0

Или сохраните оба варианта, если вы хотите избежать '[longestWord length]', если вы хотите избежать нескольких вызовов, но вы все равно хотите получить фактическое слово в конце. –

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