按主键排序的领域结果数组实际上没有排序



我有一个包含对象的 Realm db,主键是一个包含数字的字符串,即

@objc public class Caller : Object
{
@objc dynamic var number                    = ""

...
override public static func primaryKey() -> String? {
return "number"
}

如果我尝试检索按键排序的对象,它们不会按顺序出现,即

let results = realm.objects(Caller.self).sorted(byKeyPath: "number")

如果数据库包含 3 个对象,其值为12037366517数、12037600287数67725082。然后,如果我遍历结果并记录"数字",结果为:

12037366517
12037600287
67725082

为什么它们没有按顺序出来?

如果number是字符串,这是预期行为。按升序对字符串进行排序时,将按字典顺序排序。所以字符"3"在"2"之后,在"1"之后,依此类推。您的结果排序正确,只是没有按预期排序。

您可以通过按实际数值排序来解决此问题。最好的方法是将数字实际存储为整数而不是字符串。如果无法做到这一点,您将不得不手动排序,但我认为这将降低性能。

let results = realm.objects(Caller.self).sorted { (a, b) -> Bool in
if let aInt = Int(a), let bInt = Int(b) {
return aInt < bInt
}
return false
}

最新更新