2010-05-10 11 views
74

Voglio cercare una stringa specifica nell'array di stringhe nell'obiettivo c. Qualcuno può aiutarmi in questo senso?Ricerca stringa nell'array di stringhe nell'obiettivo c

+0

E 'il vostro lavoro? Penso che sia facile da fare. Perché solo il looping e il confronto? – vodkhang

+0

na, non ha i compiti, avevo bisogno dell'algoritmo migliore per cercare una stringa specifica che costava non molte risorse in iphone, ecco perchè ho messo la domanda –

+0

possibile duplicato di [Objective-C Search NSArray for String?] (Http: // stackoverflow .com/questions/3588344/objective-c-search-nsarray-per-string) – nielsbot

risposta

170
BOOL isTheObjectThere = [myArray containsObject: @"my string"]; 

o se avete bisogno di sapere dove si trova

NSUInteger indexOfTheObject = [myArray indexOfObject: @"my string"]; 

vi consiglio caldamente di leggere il documentation on NSArray. È meglio farlo prima di pubblicare la tua domanda :-)

+0

diciamo che ho un array contenente NSArray * myArr = [[NSArray alloc] initWithObjects: @ "test1", @ "test3", @ "test3", nil]; volevo cercare "tes", diciamo quindi volevo che un jolly wild card funzionasse, che non potessi capire, quindi ho posto questa domanda, ma grazie per la risposta, gradita –

+0

o esegui un ciclo di test e prova ogni valore, oppure esaminare NSPredicate che offre una ricerca abbastanza completa degli oggetti di raccolta, quasi altrettanto potente delle clausole SQL. http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001789 – JeremyP

42

Puoi usare la classe NSPredicate per cercare stringhe in array di stringhe. Vedere il codice di esempio riportato di seguito.

NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Maruthi",@"Hyundai", @"Ford", @"Benz", @"BMW",@"Toyota",nil]; 

NSString *stringToSearch = @"i"; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",stringToSearch]; // if you need case sensitive search avoid '[c]' in the predicate 

NSArray *results = [cars filteredArrayUsingPredicate:predicate]; 

Questo è il modo più efficiente per la ricerca stringhe in array di stringhe

+0

questo funziona bene per array di piccole dimensioni, ma se si dispone di molto grande array (più di 30k records) puoi avere qualche idea –

+0

Quindi mantieni l'array ordinato e usa una ricerca binaria (bsearch) per localizzare e inserire nuovi elementi. NSArray/NSMutableArray hanno metodi per questo. – spstanley

2
NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Max",@"Hai", @"Fine", @"Bow", @"Bomb",@"Toy",nil]; 

NSString *searchText = @"i"; 
NSArray *results = [cars filteredArrayUsingPredicate:predicate]; 

// if you need case sensitive search avoid '[c]' in the predicate 

NSPredicate *resultPredicate = [NSPredicate 
           predicateWithFormat:@"title contains[c] %@", 
           searchText]; 


searchResults = [cars filteredArrayUsingPredicate:resultPredicate]; 
+0

Mentre questo snippet di codice può rispondere alla domanda è meglio includere una spiegazione di come risponde alla domanda in modo che questa risposta sia utile per i futuri visitatori del sito – RobV

+0

Questo pezzo di codice funziona bene per trovare la parola in una matrice di parole. –