2013-07-23 12 views
7

Ho un NSArray pieno di 200.000 parole e non conosco la lunghezza di ogni parola. Ho bisogno di sapere qual è la lunghezza massima di una parola contenuta in quella matrice.Trovare la stringa più lunga all'interno di un NSArray

Per esempio, se il mio array è { "cane", "persona", "sorprendente"} La lunghezza massima di una parola contenuta in questo array sarebbe 7 ("sorprendente")

Come dovrei Fai questo?

+1

Non c'è tecnica più veloce della semplice iterazione attraverso l'array e ricerca dell'elemento più lungo. –

+0

@HotLicks vedere la risposta di Ramy – MZimmerman6

+0

@ MZimmerman6 - Sarei disposto a scommettere che tale approccio è più lento. –

risposta

23

Oltre a tutti i metodi che implicano l'iterazione di matrice, si può facilmente farlo con valueForKeyPath:, utilizzando l'operatore @max collezione:

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

Sono curioso di sapere come funziona. Puoi spiegare un po 'di più ?? – BlueMeanie

+1

@BlueMeanie Questo è possibile perché tutte le raccolte implementano alcuni operatori come max (spirale omessa per evitare virgolette), avg, count, ecc ... ecco il riferimento: http://developer.apple.com/library/ios/# DOCUMENTAZIONE/Cacao/Concettuale/KeyValueCoding/Articoli/CollectionOperators.html –

12

Si può provare questo

Per trovare la lunghezza parola più lunga

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

Per trovare lungo Parola 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

L'enumerazione veloce sembra essere più veloce della codifica dei valori-chiave, ma forse manterrei la * lunghezza * più lunga invece della * stringa * più lunga, per evitare che '[longestWord length] 'è calcolato ripetutamente. –

+0

Oppure memorizza entrambi, se si desidera evitare '[lunghezza massima lunghezza]' se si desidera evitare più chiamate ma si desidera comunque la parola effettiva alla fine. –

Problemi correlati