使用 NSPredicate 过滤 EKEvent
Posted
技术标签:
【中文标题】使用 NSPredicate 过滤 EKEvent【英文标题】:Filtering EKEvent with NSPredicate 【发布时间】:2016-07-09 17:45:06 【问题描述】:我有一个带有 EKEvents 的 NSArray,我需要过滤到一个干净的列表。
我正在寻找一个 NSPredicate,它可以过滤掉所有“title”属性(即NSString)以数字值 开头的事件。
所以,我想去掉那些看起来像 '123Something' 和 '8somethingElse' 但保留 'Anything123' 和当然'speciallyThisOne'。
我依靠你的聪明才智,因为我真的不知道从哪里开始,所以也非常感谢你的解释!
【问题讨论】:
【参考方案1】: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
【讨论】:
谢谢,这(几乎)成功了,但可能是因为我没有正确表达自己。生成的过滤数组应包含“Anything123”并过滤掉“123Something”。这是在某处添加感叹号的问题吗? 对不起,我的错,我修正了正则表达式,它只是大写的 D 而不是 d。 你是英雄!我保证我会开始调查 RegEx。以上是关于使用 NSPredicate 过滤 EKEvent的主要内容,如果未能解决你的问题,请参考以下文章