以下是示例代码:
let outstandingStudentIDs = ["BGHH2", "AGHH1", "DFGH", "DFGHJ"]
let realmResult = realm.objects(Student.self).filter("studentID in %@", outstandingStudentIDs)
realmResult没有按明显的学生ID保持排序。
如何进行自定义排序并将对象类型保留在结果<Element: RealmCollectionValue>.
中
如果将realmResult转换为Array进行排序,那么如何使用notificationToken
观察结果更改将其返回到结果
答案 0 :(得分:0)
您应该能够将 sorted
链接到该结果中。
https://realm.io/docs/swift/latest#sorting ***
let realmResult = realm.objects(Student.self).filter("studentID in %", outstandingStudentIDs).sorted(byProperty: "studentID")
击> <击> 撞击>
长答案:
要进行所需的自定义排序,您需要使用sorted(by:)
。不幸的是,这将返回一个数组而不是Results
实例。
通常会懒惰地评估Results
实例,除非您希望对其进行排序。在这种情况下,Realm将需要遍历整个数据集以确保它以正确的顺序返回对象。如果您提供自己的比较功能,Realm 必须假设您的代码是&#34;不安全&#34;并可能导致问题。
可能使Realm爆炸的例子:
let realm = try! Realm()
try! realm.write {
_ = realm.create(Student.self, value: ["studentId": "1"])
_ = realm.create(Student.self, value: ["studentId": "2"])
}
let results = realm.objects(Student.self).sorted(by: { (_, _) -> Bool in
try! realm.write {
realm.deleteAll()
}
return false
})
print(results)
这会打印一个友好的:
[[invalid object], [invalid object], [invalid object], [invalid object]]
简答:
很确定它无法完成,但我欢迎有人展示出一个不错的解决方案。