2016-07-09 11 views
0

Ich habe ein NSArray mit EKEvents, das ich auf eine saubere Liste filtern muss.Filtern von EKEvent mit NSPredicate

Ich suche nach einem NSPredicate, die alle Ereignisse herausfiltert, von denen das ‚title‘ Attribut, das ein NSString ist, mit einem numerischen Wert beginnt.

Also, ich mag diesen Titel nehmen, die aussehen wie '123Something' und '8somethingElse' aber 'Anything123' und natürlich 'specificallyThisOne' zu halten.

Ich verlasse mich auf Ihre Intelligenz, und da ich wirklich keine Ahnung habe, wo ich anfangen soll, würde auch eine Erklärung sehr geschätzt werden!

Antwort

1

NSPredicate unterstützt regulären Ausdruck, der die einfachste Möglichkeit zum Filtern von Zeichenfolgen bietet.

Dies ist ein Beispiel mit einem benutzerdefinierten Array von Wörterbüchern, es soll auch mit einem Array von EKEvent funktionieren.

Die Regex filtert alle Strings, die

  • Start ^
  • nicht mit einem oder mehreren Ziffern \\D+
  • und den Rest der .*$ Zeichenfolge ignorieren.

Da Sie nicht die Sprache erwähnen dies ist Swift:

let array = [["name" : "alpha", "title" : "123Something"], 
      ["name" : "beta", "title" : "8somethingElse"], 
      ["name" : "gamma", "title" : "Anything123"], 
      ["name" : "delta", "title" : "specificallyThisOne"]] 


let regex = "^\\D+.*$" 
let predicate = NSPredicate(format:"title MATCHES %@", regex) 

let filteredArray = (array as NSArray).filteredArrayUsingPredicate(predicate) 
print(filteredArray) 

Es ist sogar möglich, ohne NSPredicate mit der nativen filter Funktion

let filteredArray = array.filter { $0["title"]!.rangeOfString(regex, options: .RegularExpressionSearch) != nil } 
+0

Danke, dass (fast) hat den Trick , aber wahrscheinlich, weil ich mich nicht richtig ausgedrückt habe. Das resultierende filteredArray sollte "Anything123" enthalten und "123Something" herausfiltern. Geht es darum, irgendwo einen Ausruf hinzuzufügen? – Sjakelien

+0

Tut mir leid, mein Fehler, ich habe den Regex repariert, es ist nur Kapital D statt d. – vadian

+0

Du bist ein Held! Ich verspreche, ich werde RegEx untersuchen. – Sjakelien

Verwandte Themen