Tengo una variedad de diccionarios.
Quiero filtrar la matriz según una clave.
Probé esto:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == %@)", @"Football"];
NSArray *filteredArray = [data filteredArrayUsingPredicate:predicate];
Esto no funciona, no obtengo resultados. Creo que estoy haciendo algo mal. Sé que este es el método si "SPORT" fuera un ivar. Creo que probablemente sea diferente si se trata de una clave.
Sin embargo, no he podido encontrar un ejemplo.
Gracias
Actualizar
Agregué comillas alrededor de la cadena que estoy buscando.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == '%@')", @"Football"];
Todavía no funciona.
Actualización 2
Resuelto. De hecho, tuve que eliminar las comillas simples, lo que parece ir en contra de lo que dice la guía.
Mi problema real es que tenía una matriz anidada y en realidad no estaba evaluando los diccionarios. Movimiento de cabeza de hueso.
objective-c
cocoa
nsarray
nsdictionary
nspredicate
Corey Floyd
fuente
fuente
Respuestas:
Debería funcionar, siempre que la variable de datos sea en realidad una matriz que contenga un diccionario con la clave SPORT
Filtrado en este caso contiene el diccionario.
(el% @ no tiene que estar entre comillas, esto se hace cuando NSPredicate crea el objeto).
fuente
Sé que son noticias viejas, pero para agregar mis dos centavos. Por defecto, uso los comandos en
LIKE[cd]
lugar de solo[c]
. El[d]
compara las letras con símbolos de acento. Esto funciona especialmente bien en mi aplicación Warcraft, donde la gente deletrea su nombre "Vòódòó", lo que hace que sea casi imposible buscar su nombre en una vista de tabla. Las[d]
tiras de sus símbolos de acento durante el predicado. Entonces, un predicado de@"name LIKE[CD] %@", object.name
whereobject.name == @"voodoo"
devolverá el objeto que contiene el nombre Vòódòó.De la documentación de Apple: like [cd] significa “like insensible a mayúsculas y minúsculas y diacríticos.”) Para una descripción completa de la sintaxis de cadena y una lista de todos los operadores disponibles, vea Predicate Format String Syntax .
fuente
fuente
NSPredicate
solo está disponible en iPhone 3.0.No lo notará hasta que intente ejecutarlo en el dispositivo.
fuente
Con Swift 3, cuando desee filtrar una matriz de diccionarios con un predicado basado en claves y valores de diccionario, puede elegir uno de los siguientes patrones.
# 1. Usando
NSPredicate
init(format:arguments:)
inicializadorSi viene de Objective-C,
init(format:arguments:)
ofrece un estilo de codificación de valor clave para evaluar su predicado.Uso:
# 2. Usando
NSPredicate
init(block:)
inicializadorComo alternativa, si prefiere las API fuertemente tipadas en lugar de las API escritas en cadena , puede usar el
init(block:)
inicializador.Uso:
fuente
Mirando la referencia de NSPredicate , parece que necesita rodear su carácter de sustitución con comillas. Por ejemplo, su predicado actual dice:
(SPORT == Football)
desea que se lea(SPORT == 'Football')
, por lo que su cadena de formato debe ser@"(SPORT == '%@')"
.fuente