我在我的项目中使用领域并在这里注册类别名称
我想列出与一组相同的类别,并在列表旁边写下组号。
这是我的领域数据库:
import RealmSwift
class CatList: Object {
@objc dynamic var catname: String = ""
}
我可以用这段代码列出数据:
let realm = try! Realm()
var Items: Results<CatList>?
override func viewDidLoad() {
super.viewDidLoad()
Items = realm.objects(CatList.self)
}
假设数据库中有 5 个类别
绿色
黄色
红色
黄色
绿色
我必须列出一次相同的类别并在旁边打印总数。
所以应该是这样的;
Green 2
---------
Yellow 2
---------
Red 1
注意:为了提供帮助,我可以按如下方式在 android Room 上执行此操作。
@Query("Select id, catname, COUNT(catname) AS total FROM catlist GROUP BY catname ORDER BY total DESC")
对不起我的英语不好。
Realm结果是同质的;它们将只包含一种类型的数据。
因此 Realm 查询只会返回一种类型的对象,因此您不能直接通过 Realm 查询同时提取类别名称和计数*
但是解决方案非常简单;捕获一个唯一的类别列表,遍历它们并输出每个类别的计数。
let results = realm.objects(CatList.self).distinct(by: ["catname"])
for category in results {
let cat = category.catname
let count = realm.objects(CatList.self).where { $0.catname == cat}.count
print("category: \(cat) has a count of \(count)")
}
一些注意事项:此时,使用 @Persisted
转向更现代的 Realm 实现是个好主意class CatList: Object {
@Persisted var catname = ""
}
此外 - 为了可读性,因为对象不是列表,它是单个对象,CatList 可能更好地命名为 Category。
*以上是以 lazy-loading 方式处理数据的领域和内存友好解决方案。也就是说,使用 Swift 高阶函数可能会实现单行代码——但是,如果数据集很大或大小未知,通常不推荐这样做。