Realm docs 中缺少此特定用例的详细信息,而 Apple 的 NSPredicate 引用对于不熟悉语法的人来说是一场噩梦。结果,我得到了一堆相互关联的问题。
- Realm 列表的
filter()
和index()
方法有两种变体,一种使用NSPredicate
,另一种使用字符串谓词:我从 GitHub 页面推断字符串谓词版本只是一个包装器并且还使用NSPredicate
语法是否正确? - 如何执行计数查询并实际获取与条件匹配的条目数,而不是获取与所述条件匹配的对象的
Results
集合?这可能吗?甚至有必要吗? - 是否使用
filter()
获取对象的Results
集合实际上占用了系统资源,或者引用的惰性是否意味着获取Results
集合,然后检查其.count
是否等同于实际计数查询(la SQL)? - 如果
filter()
不够用,我需要使用 Swift 的map()
或reduce()
怎么办 Realm 列表集合中的特定属性?这可能吗?
基本上,我的大部分问题都源于尝试处理存储在 Realm 列表中的对象的属性,而不是对象本身,即计算列表中的多少对象具有属性设置为某个值,多次设置不同的值,然后找出哪个计数更高——从不实际检索任何值以直接使用。
最佳答案
有 3 种变体:Predicate、String(包装 predicate)和一个闭包,除非您确实需要它,否则不应使用它,因为它会退化为数组并阻止数据库查询中的优化,因为它具有将所有结果交给您关闭。
Realm 支持 NSPredicate 聚合函数,包括 @count。查看documentation .
结果确实比较懒,计数可以优化。例如,如果您正在查询一个索引字段,那么它可以只查看索引的数量,而不必提取所有记录。
您始终可以使用
Array(results)
将结果衰减到 swift 数组中。在那种情况下,值会被急切地复制,您不再有一组惰性自动更新的结果。然后,您可以做任何您可以用常规数组或序列做的事情,例如filter
、map
、reduce
、index
,first
等
关于ios - 如何对 Realm List 集合执行实际计数查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49314574/