2013-07-23 13 views
7

Mam NSArray wypełniony 200 000 słów i nie znam długości każdego słowa. Muszę wiedzieć, jaka jest maksymalna długość słowa zawartego w tej tablicy.Znajdowanie najdłuższego ciągu w obrębie NSArray

Na przykład, jeśli tablica jest { „pies”, „osoba”, „niesamowite”} Maksymalna długość słowa zawarte w tej tablicy będzie 7 („amazing”)

jak bym Zrób to?

+1

Nie ma szybszej techniki niż zwykłe iterowanie po tablicy i szukanie najdłuższego elementu. –

+0

@HotLicks zobacz odpowiedź Ramy – MZimmerman6

+0

@ MZimmerman6 - Byłbym skłonny założyć się, że to podejście jest wolniejsze. –

Odpowiedz

23

Oprócz wszystkich metod, które implikują iteracji na tablicy, można łatwo zrobić z valueForKeyPath:, używając operatora @max kolekcji:

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

Jestem ciekawy, jak to działa. Czy możesz wyjaśnić trochę więcej? – BlueMeanie

+1

@ BlueMeanie Jest to możliwe, ponieważ wszystkie kolekcje implementują niektóre operatory, takie jak max (spirala pominięta, aby uniknąć cytatów), avg, count, etc ... tutaj jest odnośnik: http://developer.apple.com/library/ios/# DOKUMENTACJA/Kakao/Konceptualna/KeyValueCoding/Articles/CollectionOperators.html –

12

może spróbować tej

Aby znaleźć najdłuższą długość słowa

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); 

aby znaleźć długo est słowo

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

Szybkie wyliczanie wydaje się szybsze niż kodowanie klucz-wartość, ale prawdopodobnie zachowałbym najdłuższą * długość * zamiast najdłuższego * ciągu *, aby uniknąć tego '[longestWord length] 'jest obliczane wielokrotnie. –

+0

Albo zapisz oba, jeśli chcesz uniknąć "[longestWord length]", jeśli chcesz uniknąć wielu połączeń, ale nadal chcesz na końcu wyrazu. –

Powiązane problemy