ios - 如何对 Realm List 集合执行实际计数查询?

标签 ios swift realm nspredicate

Realm docs 中缺少此特定用例的详细信息,而 Apple 的 NSPredicate 引用对于不熟悉语法的人来说是一场噩梦。结果,我得到了一堆相互关联的问题。

  1. Realm 列表的filter()index() 方法有两种变体,一种使用NSPredicate,另一种使用字符串谓词:我从 GitHub 页面推断字符串谓词版本只是一个包装器并且还使用 NSPredicate 语法是否正确?
  2. 如何执行计数查询并实际获取与条件匹配的条目数,而不是获取与所述条件匹配的对象的 Results 集合?这可能吗?甚至有必要吗?
  3. 是否使用 filter() 获取对象的 Results 集合实际上占用了系统资源,或者引用的惰性是否意味着获取 Results 集合,然后检查其 .count 是否等同于实际计数查询(la SQL)?
  4. 如果 filter() 不够用,我需要使用 Swift 的 map()reduce() 怎么办 Realm 列表集合中的特定属性?这可能吗?

基本上,我的大部分问题都源于尝试处理存储在 Realm 列表中的对象的属性,而不是对象本身,即计算列表中的多少对象具有属性设置为某个值,多次设置不同的值,然后找出哪个计数更高——从不实际检索任何值以直接使用。

最佳答案

  1. 有 3 种变体:Predicate、String(包装 predicate)和一个闭包,除非您确实需要它,否则不应使用它,因为它会退化为数组并阻止数据库查询中的优化,因为它具有将所有结果交给您关闭。

  2. Realm 支持 NSPredicate 聚合函数,包括 @count。查看documentation .

  3. 结果确实比较懒,计数可以优化。例如,如果您正在查询一个索引字段,那么它可以只查看索引的数量,而不必提取所有记录。

  4. 您始终可以使用 Array(results) 将结果衰减到 swift 数组中。在那种情况下,值会被急切地复制,您不再有一组惰性自动更新的结果。然后,您可以做任何您可以用常规数组或序列做的事情,例如 filtermapreduceindex, first

关于ios - 如何对 Realm List 集合执行实际计数查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49314574/

相关文章:

ios - Swift 'init()' 在 Xcode 7.2 JSQMessages 中不可用问题

ios - 如何用坐标检测手指从上到下/从下到上

swift - 按顺序搜索数组

ios - 快速自定义 map 类

ios - 如何在屏幕上显示几秒钟的消息?

swift - 尽管处于事务中, Realm 写入事务仍失败

ios - 如何在 RealmSwift 中创建关系?

ios - Realm 迁移一对多

ios - 如何从 Xamarin 中的 Controller 填充表格?

objective-c - 异步下载的图像仅在点击或滚动后出现在 UITableView 中