使用 NSPredicate 过滤 EKEvent

Filtering EKEvent with NSPredicate

我有一个带有 EKEvents 的 NSArray,我需要将其过滤成一个干净的列表。

我正在寻找一个 NSPredicate 来过滤掉所有事件,其中 'title' 属性是 一个 NSString,以数值

所以,我想去掉那些看起来像 '123Something''8somethingElse' 的标题,但保留 'Anything123' 当然还有 'specificallyThisOne'.

我相信你的聪明才智,而且,由于我真的不知道从哪里开始,所以也非常感谢你的解释!

NSPredicate支持正则表达式,提供最方便的字符串过滤方式。

这是一个自定义字典数组的示例,它应该也适用于 EKEvent.

数组

正则表达式过滤所有

  • 开始^
  • 有一个或多个数字\D+
  • 并忽略字符串的其余部分 .*$

因为你没有提到语言,所以这是 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)

甚至可以不用 NSPredicate 使用本机 filter 函数

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