使用 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 }
我有一个带有 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 }