2010-05-10 10 views
74

Deseo buscar una cadena específica en la matriz de cadenas en el objetivo c. ¿Alguien puede ayudarme en este sentido?Búsqueda de cadenas en matriz de cadenas en el objetivo c

+0

¿Es su tarea? Creo que es fácil de hacer. ¿Por qué solo bucle y comparación? – vodkhang

+0

na, no es tarea, necesitaba el mejor algoritmo para buscar una cadena específica que no costaba muchos recursos en iphone, por eso puse la pregunta –

+0

posible duplicado de [Objective-C Search NSArray for String?] (Http: // stackoverflow .com/questions/3588344/objective-c-search-nsarray-for-string) – nielsbot

Respuesta

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

o si lo que necesita saber dónde está

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

recomiendo que lea el documentation on NSArray. Lo mejor es hacerlo antes de publicar su pregunta :-)

+0

Digamos que tengo una matriz que contiene NSArray * myArr = [[NSArray alloc] initWithObjects: @ "test1", @ "test3", @ "test3", nil]; quería buscar "tes" digamos entonces quería un stuf de comodín para trabajar, que no podía entender, así que hice esta pregunta, pero gracias por la respuesta, apreciado –

+0

o recorre y prueba cada valor, o busque en NSPredicate, que proporciona una búsqueda bastante completa de objetos de colección, casi tan poderoso como las cláusulas SQL where. http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001789 – JeremyP

42

Puede usar la clase NSPredicate para buscar cadenas en una matriz de cadenas. Vea el siguiente código de muestra.

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

Ésta es la forma más eficiente para buscar cadenas en matriz de cadenas

+0

esto funciona bien para la pequeña matriz, pero si u tiene muy grande array (más de 30k registros) puede tener alguna idea –

+0

Luego mantenga ordenada la matriz y use una búsqueda binaria (bsearch) para localizar e insertar elementos nuevos. NSArray/NSMutableArray tienen métodos para eso. – 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

Si bien este fragmento de código puede responder a la pregunta, es mejor incluir una explicación de cómo responde la pregunta para que esta respuesta sea útil para los futuros visitantes del sitio – RobV

+0

Este código funciona bien para encontrar la palabra en una matriz de palabras. –

Cuestiones relacionadas