在 CoreData Swift

问题描述

我需要关于 1 个核心数据获取请求的帮助。我有 2 个实体

  1. 部门
  2. 学生(有分数属性) 所以系里可以有多个学生。 现在我想从不同部门获取最高分的每个学生。 我已经查询了分数排序。但是想要每个(独特的)部门的唯一学生
let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Students")
let sortDescriptor = NSSortDescriptor(key: "scores",ascending: false)
fetchRequest.fetchBatchSize = 50
fetchRequest.includesSubentities = true

请建议,我们如何找到每个部门的每个学生的最高分。

现在不幸的是,我无法将结果类型用作 NSDictionaryResultType,因为我正在 NSFetchedResultsController 中获取数据。但是想要像@distinctUnionOfObjects 这样的东西。 [students valueForKeyPath:@"@distinctUnionOfObjects.department"]

预期输出

  1. 罗宾(法律)74
  2. 斯蒂芬(数学)98
  3. 约翰(计算机科学)95
  4. 蒂姆(电子)90
  5. 约翰逊(经济学)80

解决方法

伙计们,我遵循了@JoakimDanielson 分享的方法,但遇到了性能问题。因此,为了提高性能,我还将 topStudent 与分数存储在部门表中。现在性能下降是在插入时,而在 UI 线程上呈现时,性能从 1.09 ms 大幅提高到 450 usecs。注意,我在获取时还在部门中添加了索引。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...