objective c - guia - Usando NSPredicate para buscar una matriz con una matriz
qgis manual (2)
Tengo una matriz de objetos Card
(NSObjects), cada uno con un campo llamado tags
, que es una NSArray de NSStrings.
Luego me gustaría dividir el término de búsqueda del usuario en una matriz llamada keywords
de cadenas por componentsSeparatedByString
, luego usar NSPredicate para filtrar mi matriz de tarjetas según qué elementos tienen etiquetas que contienen al menos 1 palabra clave en keywords
.
Espero que no sea tan complicado! He intentado usar la cláusula NSPredicate IN
sin éxito. ¿Cómo debería hacer esto?
No me mates si esto no es exactamente correcto, pero algo como esto funcionará.
NSArray* arrayOfCards = [NSArray array];
NSArray* keywords = [NSArray array];
NSPredicate* containsAKeyword = [NSPredicate predicateWithBlock: ^BOOL(id evaluatedObject, NSDictionary *bindings) {
Card* card = (Card*)evaluatedObject;
NSArray* tagArray = card.tags;
for(NSString* tag in tagArray) {
if( [keywords containsObject: tag] )
return YES;
}
return NO;
}];
NSArray* result = [arrayOfCards filteredArrayUsingPredicate: containsAKeyword];
Teniendo en cuenta la array
contiene tarjeta de objeto.
NSArray *keyWordsList = [keywords componentSeparatedByString:@","];
[array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY %K IN %@",@"tags",keyWordsList]]
EDITAR:
Para buscar parcialmente puedes usar el operador LIKE.
[array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY %K LIKE[cd] %@",@"tags",[partialkeyWord stringByAppendingString:@"*"]]]