Mit NSPredicate filtern ein NSArray basierend auf NSDictionary Schlüssel
Ich habe ein array von dictionaries.
Möchte ich filter das array nach einem Schlüssel.
Habe ich versucht, dieses:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == %@)", @"Football"];
NSArray *filteredArray = [data filteredArrayUsingPredicate:predicate];
Dies nicht funktioniert, bekomme ich keine Ergebnisse. Ich denke, ich mache etwas falsch. Ich weiß, das ist die Methode, wenn "SPORT" war ein ivar. Ich denke, es ist wahrscheinlich anders, wenn es ein Schlüssel ist.
Ich habe nicht in der Lage zu finden, ein Beispiel jedoch.
Dank
Update
Fügte ich Anführungszeichen um den string ich bin auf der Suche nach.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == '%@')", @"Football"];
Es funktioniert immer noch nicht.
Update 2
Gelöst. Ich hatte tatsächlich entfernen Sie die einfachen Anführungszeichen, das scheint zu gehen gegen das, was das Handbuch sagt.
Mein eigentliches problem ist ich hatte eine verschachtelte array-und ich war nicht eigentlich der Auswertung der Wörterbücher. Knochen Kopf bewegen.
InformationsquelleAutor der Frage Corey Floyd | 2009-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte es funktionieren - so lange, wie die Daten-Variablen ist ein array, ein dictionary mit dem key-SPORT
Gefiltert in diesem Fall enthält das Wörterbuch.
(%@ nicht zitiert werden, geschieht dies, wenn NSPredicate erstellt das Objekt.)
InformationsquelleAutor der Antwort suraken
Ich weiß, es ist alte Nachrichten, aber meine zwei Cent hinzu. Standardmäßig verwende ich die Befehle
LIKE[cd]
anstatt nur[c]
. Die[d]
vergleicht die Buchstaben mit Akzent Symbole. Dies funktioniert besonders gut in meinem Warcraft-App, wo die Menschen Zauber Ihre Namen "Vòódòó" macht es fast unmöglich, nach Ihren Namen in einem tableview. Die[d]
Streifen Ihren Akzent Symbole während das Prädikat. So ein Prädikat, das von@"name LIKE[CD] %@", object.name
woobject.name == @"voodoo"
wird das Objekt zurückgegeben, das mit dem Namen Vòódòó.Aus der Apple Dokumentation:
wie[cd] bedeutet "Fall - und diakritische Zeichen unempfindlich wie.") Für eine vollständige Beschreibung der syntax und eine Liste mit allen Operatoren zur Verfügung, siehe Prädikat Format-String-Syntax.
InformationsquelleAutor der Antwort ChargedNeuron
InformationsquelleAutor der Antwort Isaak Osipovich Dunayevsky
NSPredicate
ist nur verfügbar in iPhone 3.0.Werden Sie nicht bemerken, bis Sie versuchen, führen Sie auf dem Gerät.
InformationsquelleAutor der Antwort Rod
Swift 3, wenn Sie filtern möchten, die ein array von dictionaries mit einem Prädikat basiert auf dictionary-Schlüssel und Werte, die Sie können wählen Sie eine der folgenden Muster.
#1. Mit
NSPredicate
init(format:Argumente:)
- InitialisierungWenn Sie kommen, Objective-C,
init(format:arguments:)
bietet eine key-value-coding-style zu bewerten, Ihr Prädikat.Verwendung:
#2. Mit
NSPredicate
init(block:)
- InitialisierungAls eine alternative, wenn Sie lieber stark typisierte APIs über stringly eingegeben APIs, die Sie verwenden können
init(block:)
Initialisierung.Verwendung:
InformationsquelleAutor der Antwort Imanou Petit
Blick auf die NSPredicate Referenzes sieht aus wie Sie benötigen, um Ihre surround-substitution Charakter mit Anführungszeichen. Zum Beispiel, Ihren aktuellen Prädikat lautet:
(SPORT == Football)
Sie wollen, es zu Lesen(SPORT == 'Football')
so dass Ihr format-string sein muss@"(SPORT == '%@')"
.InformationsquelleAutor der Antwort Martin Gordon