领域查询以计算唯一条目的数量

Realm Query to count number of unique entries

我有一个信息数据数组,从 Realm 加载,包括名称。

我想计算唯一名称条目的总数以产生一个数值。

此数值将用于在 table 视图中显示唯一名称,numberOfRowsInSection 中每个唯一名称一行。

目前它将在TableView上查询并显示以下内容,这是myTableViewData;

中的所有条目

我希望它只显示唯一的条目,忽略任何重复的名称,如:

var myTableViewData: Results<RecordOfInformation>? = nil
let Realm = try! Realm() 

  override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self
        myTableViewData = realm.objects(RecordOfInformation.self).sorted(byKeyPath: "itemName")
        tableView.reloadData()
    }

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
             
        
        return myTableViewData!.count
    }

编辑

我已将 myTableViewData 修改为,

realm.objects(RecordOfInformation.self).distinct(by: ["itemName"]).sorted(byKeyPath: "itemName")
        tableView.reloadData()

table视图现在将显示

但是,在 print("myTableViewData") 期间,输出控制台将打印与每个选定的唯一名称的每个领域条目关联的所有信息。

加载所有信息是否效率太高,或者有没有办法只加载itemName作为数组只显示itemName,以数组形式显示为“Adam,Ben,控制台中的查理,达伦?

在高层次上,如果你有一个字符串数组,如你的问题所示,并且你只想获得唯一的字符串(没有重复),你可以将它转换为一个集合,你就完成了。

let nameArray = ["Adam", "Adam", "Ben", "Ben", "Ben", "Charlie", "Darren", "Darren"]
let nameSet = Set(nameArray)
print(nameSet)

输出为

["Darren", "Charlie", "Ben", "Adam"]

如果您希望它被命令用作数据源,可以将它转换回数组并排序

let uniqueNameArray = Array(nameSet)
let orderedUniqueNameArray = uniqueNameArray.sorted()
print(orderedUniqueNameArray)

和输出

["Adam", "Ben", "Charlie", "Darren"]

(有很多捷径可以走,你可以把它写成一行,但为了清楚起见,我把它写得很冗长)

编辑

如果你想得到基于某个属性唯一的Realm对象,你可以使用.distinct函数。假设领域 PersonClass 为 name 属性

let people = realm.objects(PersonClass.self)
let uniquePeopleByName = people.distinct(by: ["name"])