将 NSPredicate 与字符串匹配
Posted
技术标签:
【中文标题】将 NSPredicate 与字符串匹配【英文标题】:Matching NSPredicate With String 【发布时间】:2011-08-14 04:28:44 【问题描述】:我有一个效果不错的谓词。
NSPredicate *filter = [NSPredicate predicateWithFormat:@"code contains[cd] %@", predicateFilter];
所以如果 predicateFilter
是 112,这将找到所有包含 112
的 code
。我希望它找到所有以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 中的任何条目与包含字符串的值”