按主键排序的领域结果数组实际上没有排序
Realm Results array sorted by primary key is not coming out actually sorted
我有一个包含对象的 Realm 数据库,主键是一个包含数字的字符串,即
@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。然后,如果我遍历结果并记录 "number",结果为:
12037366517
12037600287
67725082
为什么它们不按排序顺序出现?
如果 number
是一个字符串,这是预期的行为。对字符串进行升序排序时,是按字典顺序排序的。所以字符“3”在“2”之后,“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
}
我有一个包含对象的 Realm 数据库,主键是一个包含数字的字符串,即
@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。然后,如果我遍历结果并记录 "number",结果为:
12037366517
12037600287
67725082
为什么它们不按排序顺序出现?
如果 number
是一个字符串,这是预期的行为。对字符串进行升序排序时,是按字典顺序排序的。所以字符“3”在“2”之后,“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
}