¿Cómo puedo usar un NSPnetworkingicate para seleccionar una frase exacta de una matriz?

Estoy usando un NSPnetworkingicate para filtrar un NSDictionary por una list de estados y países.

Todos los datos se almacenan en una matriz separada por comas: @ "Alabama", @ "Alaska", @ "Arizona", @ "Arkansas", @ "California", @ "Colorado", etc.

Sin embargo, hay 2 situaciones en las que se producen duplicates. El estado "Nuevo México" contiene la palabra "México", y "Arkansas" contiene la palabra "Kansas.

Aquí está el código básico que estoy usando para definir el pnetworkingicado.

NSPnetworkingicate *pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"Location contains[c] %@", @"Kansas"]; 

¿Cómo puedo asegurarme de que "Kansas" no devuelva objects con "Arkansas"? Usar BEGINSWITH o LIKE no funciona porque la list comienza con algún otro estado.

¡Gracias!

Veamos si entiendo correctamente. Tienes un dictionary, donde hay una key "Ubicación" cuyo object es una cadena con nombres de estados separados por comas. Parece que necesitas una expresión regular para que coincida.

 NSString* expr = [NSString stringWithFormat:@"^%1$@.*|.*, %1$@.*", @"Kansas"] NSPnetworkingicate* pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"Location MATCHES[c] %@", expr]; 

Ahora, así es como se comportaría para diferentes ejemplos:

 @{@"Location": @"Kansas, Arkansas, Alabama"} //Pass @{@"Location": @"Alabama, Kansas"} //Pass @{@"Location": @"Arkansas, Alabama"} //Fail 

La expresión regular ^%1$@.*|.*, %1$@.* Prueba si la palabra provista está al comienzo de la cadena o seguido de caracteres y "," lo que lo coloca en el medio. %1$@ toma el primer parámetro, de modo que puede usarse varias veces en lugar de privizar la misma cadena varias veces.

¿Puede ser esto ayuda?

 // If I understood correctly, then your locations in the dictionary are like this NSString *locations = @"Alabama, Alaska, Arizona, Arkansas"; NSString *trimmedLocations = [locations stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; NSMutableArray *compoments = [[trimmedLocations componentsSeparatedByString:@","] mutableCopy]; //now in components we have this: @[@"Alabama", @"Alaska", @"Arizona", @"Arkansas", @"California", @"Colorado"] [compoments filterUsingPnetworkingicate:[NSPnetworkingicate pnetworkingicateWithBlock:^BOOL(NSString *evaluatedObject, NSDictionary *bindings) { return [evaluatedObject isEqualToString:@"Kansas"]; }]]; BOOL match = compoments.count; if (match) { //do something with locations... } 
 NSPnetworkingicate* pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"Location IN %@", myStatesArray]; 

Creo que lo que quieres es una búsqueda exacta de pnetworkingicados de coincidencias:

NSPnetworkingicate * pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat: @ "Location == [c]% @", @ "Kansas"];

¿Entiendo tu pregunta incorrectamente?

Funcionará:

 NSPnetworkingicate *pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"entity.name LIKE[c] %@", myString]; 

¿COMO coincide con cadenas? y * como comodines. El [c] indica que la comparación no debe distinguir entre mayúsculas y minúsculas.

Si no quieres y * para ser tratados como comodines, puede usar == en lugar de COMO:

 NSPnetworkingicate *pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"entity.name ==[c] %@", myString]; 

Más información en la documentation de syntax de cadenas de formatting de pnetworkingicciones de NSPnetworkingicate.

  NSPnetworkingicate *pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"Location matches[c] %@", @"Kansas"]; 

Esto debe ayudarlo con la solución.

Pruebe su pnetworkingicate con la palabra key matches , le dará la coincidencia exacta del resultado y, en consecuencia, puede eliminar la ocurrencia duplicada en el pnetworkingicado como se muestra a continuación:

 NSArray *yourArr=@[@"Alabama", @"Alaska", @"Arizona", @"Arkansas", @"California", @"Colorado"]; NSPnetworkingicate *pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"Location contains[CD] %@", @"Kansas"]; NSMutableArray *filterdArray=[yourArr filtenetworkingArrayUsingPnetworkingicate:pnetworkingicate]; if(filterdArray.count>0) { NSLog(@"Invalid State"); }