NSPredicate 仅查找第一个匹配项

Posted

技术标签:

【中文标题】NSPredicate 仅查找第一个匹配项【英文标题】:NSPredicate for finding only the first match 【发布时间】:2014-03-26 09:55:31 【问题描述】:

在 Core Data 中,我有一个名为 UUID 的字段,它是一个唯一 ID。

现在,我想获取一个特定的 UUID 记录。为此,我需要使用NSPredicate。但据我所知,谓词会搜索整个数据存储。例如,假设有 10 条记录,我想搜索值为 2UUID。谓词将在找到 2 后继续搜索(占用额外的 CPU 周期)。

我想知道我们是否可以对此进行优化。如何让谓词在找到第一个对象后停止搜索。

【问题讨论】:

您可以将setFetchLimit 设置为1(您需要的限制)以获取请求.. 谢谢拉贾。假设我想对 NSArray 做同样的事情。 参考参考文档中的聚合操作 - array[FIRST] - Specifies the first element in the array array. 链接 - developer.apple.com/library/mac/documentation/Cocoa/Conceptual/… Raja That First 用于多任务阵列 【参考方案1】:

在 Core Data 中,在 fetch 请求上使用 setFetchLimit: 来限制结果的数量。如果您要经常使用 UUID 属性,也可以为其添加索引。

如果您想在数组上运行谓词并限制命中,您需要自己迭代数组 (enumerateObjectsWithOptions:usingBlock:) 并将谓词显式应用于每个项目 (evaluateWithObject:)。然后,当找到匹配项时,使用块的BOOL *stop 参数结束迭代。

【讨论】:

以上是关于NSPredicate 仅查找第一个匹配项的主要内容,如果未能解决你的问题,请参考以下文章

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

NSPredicate 用于 NSFetchRequest 中的多个匹配项

PHP Regex preg_replace 函数仅查找和替换 3 个匹配项中的第一个和最后一个,而不是中间一个

一对多关系 iPhone - NSPredicate 核心数据查询

从 pandas 数据框列中查找所有正则表达式匹配项

python 在列表中查找第一个匹配项