NSPredicate - 返回不精确的匹配

Posted

技术标签:

【中文标题】NSPredicate - 返回不精确的匹配【英文标题】:NSPredicate - Return inexact matches 【发布时间】:2015-10-30 18:53:23 【问题描述】:

在我的应用中,我允许用户使用文本字段关键字搜索按品牌/型号搜索车辆。这是我的谓词:

if (self.keywordSearch.text.length > 0) 

     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"fields.make CONTAINS[cd] %@ OR fields.model CONTAINS[cd] %@", self.keywordSearch.text, self.keywordSearch.text];            
     self.vehicleArray = [[self.vehicleArray filteredArrayUsingPredicate:predicate] mutableCopy];

问题在于,如果车辆品牌/型号是“福特 F-150”并且用户搜索 F150 或 F 150,则该车辆不包含在结果中。只有当他们搜索 F-150 或 f-150 时才会返回。

有没有办法确保返回这些不精确的匹配项?

【问题讨论】:

当然有——但你必须清楚结果应该有多不精确——如果搜索是F150,类似... Fast 1 Big 5 Lalala 0 ... 的内容也会匹配吗?你有什么规则来指定匹配的不精确程度? @luk2302 好吧,假设我只是想允许上述情况。所以,带连字符的 (f-150) 词...用户可以不包括连字符 (f150) 或放置一个空格而不是连字符 (f 150) ...该谓词看起来如何? 【参考方案1】:

我建议为此使用正则表达式。您可以在 NSPredicate 格式中使用正则表达式文字(在此处描述:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pUsing.html),也可以手动迭代数组并使用 NSRegularExpression 来比较字符串。

【讨论】:

以上是关于NSPredicate - 返回不精确的匹配的主要内容,如果未能解决你的问题,请参考以下文章

IOS / Objective-C:核心数据NSPredicate使用IN不返回所有匹配

带有 NSPredicate 的 Fetchrequest 不返回正确的值

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

ios 学习之 NSPredicate 模糊精确查询

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

BERT 预训练 MLM + NSP