2015-10-20 58 views
5

我有一個ID數組:[INT]。現在我想選擇所有具有這些ID的對象,但需要按照ID數組中ID的順序。使用Realm和NSPredicate對數組索引進行排序

let IDs = [2, 6, 3, 4, 10, 9] 
let predicate = NSPredicate(format: "id IN %@", IDs) 
let objects = realm.objects(Item.self).filter(predicate) 

但最後,對象以不同的方式與ID排序。有什麼方法可以將這些對象按正確順序排序嗎?

回答

5

可以使用sort()做到這一點:

let IDs = [2, 6, 3, 4, 10, 9] 
let predicate = NSPredicate(format: "id IN %@", IDs)  
do { 
    let realm = try Realm() 
    let objects = realm.objects(Item).filter(predicate).sort({ IDs.indexOf($0.id) < IDs.indexOf($1.id) }) 
} catch {   
} 
+1

這種做法一定會實現的匹配進行排序操作查詢每一個對象的雨燕類實例。使用'Results.sorted(_ :)'來避免這種急切的實現。然而,這種方法對於應用Realm不支持的自定義排序算法是很好的(甚至是必要的)。 – jpsim

+0

謝謝。這工作。但是,在使用.sort之前,我們需要實現所有對象。雖然結果.sorted不能檢測ID數組中的ID的順序。 – mashix

+0

這個問題需要一個自定義排序算法,所以沒有辦法實現對象。 – joern

-1

在境界,Results符合RealmCollectionType協議,其中有一個sorted(_:)成員函數。這個函數的SortDescriptors序列,這是StringLiteralConvertible,使他們很容易使用:

let realm = try! Realm() 
let IDs = [2, 6, 3, 4, 10, 9] 
let objects = realm.objects(Item).filter("id IN %@", IDs).sorted(["id"]) 
+0

我試圖使用排序(「ID」),但它不是我所需要的。我想按照ID在數組ID中的順序來排序項目。 – mashix

+2

我明白了。然後,喬恩的答案是現在做這件事的最好方法。 – jpsim

相關問題