我有一个列supervisor
的对象。在supervisor
中,有以下值:
我怎样才能归还约翰?
class Person: Object {
dynamic var name: String = String()
答案 0 :(得分:4)
Realm Results
实施RealmCollectionType
RealmCollectionType
具有count
属性和max(_:)
聚合操作。
你需要做的是(以下是伪代码,不会编译,只是为了说明这一点):
results.filter {element.count中的元素== results.max(byCount)}。第一次
Result
对象上的任何操作都在Realm database
中执行,而不是在设备内存中执行。
答案 1 :(得分:1)
您可以获取与您的列Person
相关联的所有supervisor
个对象(List<T>
?),并计算这些name
个对象中的Person
个频率,从最大数量自然遵循的地方。
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与{{1} } 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"
)。
但是,我可能不会回答你的问题:如果不是你想要的话,请扩展它。
答案 2 :(得分:0)
您有一个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> (
);
}