使用Realm和NSPredicate按数组索引排序

时间:2015-10-20 19:07:04

标签: nspredicate realm

我有一个ID数组:[INT]。现在我想选择具有这些ID的所有对象,但需要遵循IDs数组中的id顺序。

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

但最后,对象以不同的方式使用ID进行排序。有什么方法可以将这些对象排序到正确的顺序吗?

2 个答案:

答案 0 :(得分: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 :(得分:0)

在领域中,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"])