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?

Caballero sucio
fuente
¿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
posible duplicado de Objective-C Search NSArray for String?
nielsbot

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

JeremyP
fuente
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

Rashid
fuente
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];
Rahul K Rajan
fuente
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