NSPredicate 仅查找第一个匹配项
Posted
技术标签:
【中文标题】NSPredicate 仅查找第一个匹配项【英文标题】:NSPredicate for finding only the first match 【发布时间】:2014-03-26 09:55:31 【问题描述】:在 Core Data 中,我有一个名为 UUID
的字段,它是一个唯一 ID。
现在,我想获取一个特定的 UUID
记录。为此,我需要使用NSPredicate
。但据我所知,谓词会搜索整个数据存储。例如,假设有 10 条记录,我想搜索值为 2
的 UUID
。谓词将在找到 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 个匹配项中的第一个和最后一个,而不是中间一个