我有问题。我的任务是从CoreData中获取用户,并根据他们的总分数对它们进行排序。
结果,我想出了: 1.我从CoreData获取用户。 我用它们对它们进行排序:
users = users?.map({ (user) -> (User, Int) in
return (user, (user.tasks as! Set<Task>).reduce(0, { $0 + ($1.score!.intValue)})
}).sorted(by: { (e1, e2) -> Bool in
return e1.1 > e2.1
}).map({ (user, sum) -> User in
return user
})
这样可行,但整个过程非常缓慢。有没有更好的方法来实现我的目标?
编辑:
好的,我添加了相关的moel:
我也尝试了NSSortDescriptor
,但在抓取请求期间我没有找到任何方法对数据进行排序。
答案 0 :(得分:1)
对数据进行非规范化。这是将他们的得分总和存储在用户对象中。每次插入,删除或更新分数时都必须小心,还要更新用户对象,因此最好使方法能够更新分数。