使用NSPredicate过滤EKEvent

时间:2016-07-09 17:45:07

标签: ios nspredicate

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

我正在寻找一个 NSPredicate 来过滤掉所有“title”属性(一个NSString,以数值开头)的事件。

所以,我想拿出那些看起来像'123Something''8somethingElse'的标题,但保留'Anything123'和当然'具体是这个'

我依靠你的聪明,而且,因为我真的不知道从哪里开始,所以解释也会受到高度赞赏!

1 个答案:

答案 0 :(得分:3)

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 { $0["title"]!.rangeOfString(regex, options: .RegularExpressionSearch) != nil }