J'ai une panoplie de dictionnaires.
Je souhaite filtrer le tableau en fonction d'une clé.
J'ai essayé ceci:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == %@)", @"Football"];
NSArray *filteredArray = [data filteredArrayUsingPredicate:predicate];
Cela ne fonctionne pas, je n'obtiens aucun résultat. Je pense que je fais quelque chose de mal. Je sais que c'est la méthode si "SPORT" était un ivar. Je pense que c'est probablement différent s'il s'agit d'une clé.
Je n'ai cependant pas pu trouver d'exemple.
Merci
Mettre à jour
J'ai ajouté des guillemets autour de la chaîne que je recherche.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == '%@')", @"Football"];
Cela ne fonctionne toujours pas.
Mise à jour 2
Résolu. En fait, j'ai dû supprimer les guillemets simples, ce qui semble aller à l'encontre de ce que dit le guide.
Mon vrai problème est que j'avais un tableau imbriqué et que je n'évaluais pas réellement les dictionnaires. Mouvement de la tête osseuse.
objective-c
cocoa
nsarray
nsdictionary
nspredicate
Corey Floyd
la source
la source
Réponses:
Cela devrait fonctionner - tant que la variable de données est en fait un tableau contenant un dictionnaire avec la clé SPORT
Filtré dans ce cas contient le dictionnaire.
(le% @ n'a pas besoin d'être entre guillemets, cela est fait lorsque NSPredicate crée l'objet.)
la source
Je sais que ce sont de vieilles nouvelles mais pour ajouter mes deux cents. Par défaut, j'utilise les commandes
LIKE[cd]
plutôt que juste[c]
. Le[d]
compare les lettres avec des symboles d'accent. Cela fonctionne particulièrement bien dans mon application Warcraft où les gens épellent leur nom "Vòódòó", ce qui rend presque impossible la recherche de leur nom dans une vue de table. Les[d]
bandes leurs symboles d'accent pendant le prédicat. Donc, un prédicat d'@"name LIKE[CD] %@", object.name
oùobject.name == @"voodoo"
retournera l'objet contenant le nom Vòódòó.Extrait de la documentation Apple: comme [cd] signifie «insensible à la casse et au diacritique comme».) Pour une description complète de la syntaxe de chaîne et une liste de tous les opérateurs disponibles, voir Syntaxe de chaîne de format de prédicat .
la source
la source
NSPredicate
n'est disponible que sur l'iPhone 3.0.Vous ne le remarquerez pas avant d'essayer de l'exécuter sur l'appareil.
la source
Avec Swift 3, lorsque vous souhaitez filtrer un tableau de dictionnaires avec un prédicat basé sur des clés et des valeurs de dictionnaire, vous pouvez choisir l'un des modèles suivants.
#1. Utilisation de l'
NSPredicate
init(format:arguments:)
initialiseurSi vous venez d'Objective-C,
init(format:arguments:)
propose un style de codage clé-valeur pour évaluer votre prédicat.Usage:
# 2. Utilisation de l'
NSPredicate
init(block:)
initialiseurComme alternative si vous préférez les API fortement typées aux API de type string , vous pouvez utiliser l'
init(block:)
initialiseur.Usage:
la source
En regardant la référence NSPredicate , il semble que vous deviez entourer votre caractère de substitution de guillemets. Par exemple, votre prédicat actuel lit:
(SPORT == Football)
Vous voulez qu'il soit lu(SPORT == 'Football')
, donc votre chaîne de format doit l'être@"(SPORT == '%@')"
.la source