2013-07-23 153 views
7

我有一個填充了200,000個單詞的NSArray,我不知道每個單詞的長度。 我需要知道該數組中包含的單詞的最大長度是多少。查找NSArray中的最長字符串

例如,如果我的數組是{「狗」,「人」,「驚豔」} array中一個字的最大長度是7(「驚豔」)

我會怎樣做這個?

+1

沒有什麼技術比簡單地遍歷數組並尋找最長的元素更快。 –

+0

@HotLicks看到Ramy的回答 – 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/#文檔/可可/概念/ 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字

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

快速枚舉似乎比鍵值編碼更快,但我可能會保留最長的* length *而不是最長的* string *,以避免出現[longestword長度]'被重複計算。 –

+0

如果你想避免多次呼叫,但是你仍然希望實際的單詞在最後,如果你想避免'[longestword length]',或者同時存儲這兩個字。 –

相關問題