2013-07-23 82 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]',或者同时存储这两个字。 –