【问题标题】:Realm Query to count number of unique entries领域查询以计算唯一条目的数量
【发布时间】:2021-03-25 08:25:12
【问题描述】:

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

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

此数值将用于在表格视图中显示唯一名称,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()

tableView 现在将显示

  • 亚当
  • 查理
  • 达伦

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

这样加载所有信息的效率是不是太麻烦了,还是有办法只加载itemName作为数组只显示itemName,以数组形式显示为“Adam, Ben, Charlie, Darren”在控制台中?

【问题讨论】:

标签: swift uitableview realm datasource


【解决方案1】:

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

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 函数。假设 Realm PersonClass 为 name 属性

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

【讨论】:

  • 谢谢你,杰。我尝试了您的方法,并遇到了各种错误。我认为我没有清楚地解释我的问题。我没有解释的简单字符串数组。我正在从整个领域中提取 itemName 字符串。我只想从领域中提取 itemName 字符串,而不是与每个条目关联的附加信息。
  • @Gun24SGR 如果您想使用领域对象而不是字符串,请参阅我的答案的编辑。
猜你喜欢
  • 2018-03-20
  • 1970-01-01
  • 2019-01-23
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多