将 NSPredicate 与字符串匹配

Posted

技术标签:

【中文标题】将 NSPredicate 与字符串匹配【英文标题】:Matching NSPredicate With String 【发布时间】:2011-08-14 04:28:44 【问题描述】:

我有一个效果不错的谓词。

NSPredicate *filter = [NSPredicate predicateWithFormat:@"code contains[cd] %@", predicateFilter];

所以如果 predicateFilter 是 112,这将找到所有包含 112code。我希望它找到所有以112 开头的代码。

编辑:

我有这个谓词,我怎样才能使它的代码介于以 predicateFilterStart 开头的代码和以 PredicateFilterEnd 开头的代码之间?

NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"ANY code BETWEEN %@",
                     [NSArray arrayWithObjects: 
                      [NSExpression expressionForConstantValue: [NSNumber numberWithFloat: [self.predicateFilterStart floatValue]]],
                      [NSExpression expressionForConstantValue: [NSNumber numberWithFloat: [self.predicateFilterEnd floatValue]]],
                      nil]];

【问题讨论】:

【参考方案1】:
NSPredicate *filter = [NSPredicate predicateWithFormat:@"code beginswith[cd] %@", predicateFilter];

Predicate Programming Guide

【讨论】:

谢谢,但这并不是我想要的。我想找到适合predicateFilter(例如20)和predicateFilterEnd(例如30)的代码之间的代码。所以以20和30开头的代码之间的代码,所以任何代码如25.5等 那个谓词NSLogs到code BEGINSWITH[cd] "18" AND code ENDSWITH[cd] "20",我想要的是code BETWEEN (code BEGINSWITH[cd] "18" AND code BEGINSWITH[cd] "20")之类的东西。 看看你有一个过滤器,然后你想用那个过滤器的结果进行过滤。所以基本上你必须运行第一个谓词(原始问题)两次才能获得你的值(希望只有两个),否则添加一些逻辑来选择两个,然后运行你添加到问题中的第二个谓词。

以上是关于将 NSPredicate 与字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 匹配“NSDatabase 中的任何条目与包含字符串的值”

NSPredicate 匹配反斜杠

NSPredicate ANY 只返回与字符串列表中第一个元素的关键字匹配的记录

Cloudkit 的 NSPredicate 匹配字符串

NSPredicate匹配字符串

NSPredicate 和 BEGINSWITH with CloudKit:字段值类型不匹配