我有一个对象,其列supervisor
。在supervisor
有以下值:最常出现的域Realm
- 约翰
- 玛丽
- 菲尔
- 约翰
我怎样才能回到约翰?
class Person: Object {
dynamic var name: String = String()
我有一个对象,其列supervisor
。在supervisor
有以下值:最常出现的域Realm
我怎样才能回到约翰?
class Person: Object {
dynamic var name: String = String()
Realm Results
实施RealmCollectionType
RealmCollectionType
有count
财产和max(_:)
ag gregate操作。
你需要做的是一样的东西(以下是伪代码,将无法编译,只是提供给显示点):在element.count
results.filter {元素== results.max( byCount)}。第一
正在在Realm database
执行上Result
对象的任何操作,而不是在设备存储器中。
你可以取得与您的列supervisor
相关联的所有Person
对象(一List<T>
?),并计算这些Person
对象之间的name
频率,从那里最大计数自然如下。
var frequencies = [String: Int]()
for person in yourRealmObject.supervisor {
frequencies[person.name] = (frequencies[person.name] ?? 0) + 1
}
if let mostCommonName = frequencies.max(by: { $0.value < $1.value })?.key {
// ... mostCommonName holds string "John" (if that is most common)
}
当然不止一个名字可能是最常见的一种在您的专栏,在这种情况下,你可能想回到最常见的
if let mostCommonNames = frequencies.values.max()
.map({ maxCount in frequencies.filter { $0.value == maxCount }.map { $0.key } }) {
// ... mostCommonNames [String]
}
或者,如果你的数组实际上希望计算同一对象的出现次数(而不是查看name
属性:可能有几个不同的Person
:s和name
"John"
),您可以考虑使您的Person
对象符合Hashable
并计算实际唯一的频率对象(而不是对象的name
属性的不同值的频率)。
// Person is Hashable ...
frequencies = [Person: Int]()
for person in yourRealmObject.supervisor {
frequencies[person] = (frequencies[person] ?? 0) + 1
}
// ...
由于Person
是引用类型,对应于最常见的对象key
将是对该对象的引用(例如,"John"
Person
)。
但是,可能我没有关注你的问题:如果这不是你所追求的,请展开它。
我相信@Sam希望计算能够在'Realm数据库'中查找'john'作为最常见的出现值。某个'mongoDB'用户可以轻松完成。 – Mikasa
你有Person
和你想获得匹配给定的名称及其Person
监管对象之一:
class Person: Object {
dynamic var name: String = String()
let supervisors = List<Person>()
convenience init(name: String) {
self.init()
self.name = name
}
}
let realm = try! Realm()
var me: Person!
try! realm.write {
me = Person(name: "Me")
for supervisor in ["John", "Mary", "Phil"] {
me.supervisors.append(Person(name: supervisor))
}
realm.add(me)
}
let john = me.supervisors.filter("name == 'John'")[0]
print(john)
此打印:
Person {
name = John;
supervisors = RLMArray <0x6080000f2280> (
);
}
请在您的问题中包含您的领域模型定义。 –
那里你去@DávidPásztor – Sam
只有当你存储一个额外的表(我的意思是RealmObject)与这个特定的数据。 – EpicPandaForce