我有一个带有EKEvents的NSArray,我需要过滤到一个干净的列表。
我正在寻找一个 NSPredicate 来过滤掉所有“title”属性(一个NSString,以数值开头)的事件。
所以,我想拿出那些看起来像'123Something'和'8somethingElse'的标题,但保留'Anything123'和当然'具体是这个'。
我依靠你的聪明,而且,因为我真的不知道从哪里开始,所以解释也会受到高度赞赏!
答案 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 }