Búsqueda de cadenas en una matriz de cadenas en el objetivo c


87

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


¿Es tu tarea? Creo que es fácil de hacer. ¿Por qué simplemente hacer un bucle y comparar?
vodkhang

na, no es tarea, necesitaba el mejor algoritmo para buscar una cadena específica que no cuesta muchos recursos en el iPhone, por eso planteé la pregunta
Filthy Knight

Respuestas:


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

o si necesitas saber donde esta

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

Le recomiendo encarecidamente que lea la documentación sobre NSArray . Es mejor hacerlo antes de publicar su pregunta :-)


digamos que tengo una matriz que contiene NSArray * myArr = [[NSArray alloc] initWithObjects: @ "test1", @ "test3", @ "test3", nil]; quería buscar "tes", digamos que quería que un comodín funcionara, que no pude entender, así que hice esta pregunta, pero gracias por la respuesta, gracias
Filthy Knight

Puede recorrer y probar cada valor, o buscar en NSPredicate, que proporciona una búsqueda bastante completa de objetos de colección, casi tan poderosa como las cláusulas where de SQL. developer.apple.com/mac/library/documentation/cocoa/Conceptual/…
JeremyP

45

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

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

Esta es la forma más eficiente de buscar cadenas en una matriz de cadenas


esto funciona bien para una matriz pequeña, pero si tiene una matriz muy grande (más de 30k registros), ¿puede tener alguna idea?
amit gupta

Luego mantenga la matriz ordenada y use una búsqueda binaria (bsearch) para localizar e insertar nuevos elementos. NSArray / NSMutableArray tienen métodos para eso.
spstanley

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

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

Este fragmento de código funciona bien para encontrar la palabra en una variedad de palabras.
Rahul K Rajan

Quiero hacer esto con el texto inicial. Me refiero a que el texto de búsqueda debe coincidir desde el principio, no desde cualquier lugar. Por favor, ayuda
Gautam Shrivastav
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.