2017-01-22 47 views
0

我有一個問題。我的任務是從CoreData獲取用戶,並根據他們的分數總和進行排序。加快我的排序

因此,我想出了: 1.我從CoreData獲取用戶。 2.我用對它們進行排序:

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 
}) 

這工作,但整個過程是非常緩慢的。有沒有更好的方式實現我的目標?

編輯:

好吧,我加了相關moels:

User enter image description here

我也試過NSSortDescriptor,但我沒有找到任何方式在讀取請求我的數據進行排序。

+0

*「非常慢」*確實意味着什麼?您可能不應該手動對用戶進行排序,但可以在覈心數據提取請求中對它們進行排序,或者不管您如何檢索它們。 – luk2302

+0

排序需要大約1秒 – Axel

+0

我們在談論多少個用戶對象? – luk2302

回答

1

反規格化數據。這是將他們的得分總和存儲在用戶對象中。每次插入,刪除或更新分數時,都必須小心謹慎,以便更新用戶對象,因此最好使這些方法成爲您更新分數的唯一方法。

+0

最好直接將此方法添加到'User'類或'UserController' – muescha