如何计算具有不同条件的 Swift 对象数组中某个元素的出现次数

How to count occurrences of an element in a Swift array of objects with different conditions

我正在对元素属性的内容进行测试以计算出现次数

例如,对于一个简单的字符串数组,当我想用​​一个条件进行测试时,这个例子工作得很好:

    counts[item.id] = (counts[item.id] ?? 0) + 1

但是我的问题是,如何在不同的条件下进行相同的测试,不仅要测试 item.id,我还想用 item.email 进行测试。是不是像这样

 counts[item.id] = (counts[item.id]  && counts[item.email] = (counts[item.email] ?? 0) + 1

这是我要在其中添加键值的数组,键作为对象的元素,值作为出现次数

这里有一个明显的例子

    let arr = [Student, Student, Student, Student]
    var counts: [String: Int] = [:]

    for item in arr {
    counts[item.id] = (counts[item.id] ?? 0) + 1
    }


for (key, value) in counts {
    print("\(key) occurs \(value) time(s)")
}
output:

44442 occurs 1 time(s)
34434 occurs 1 time(s)
22222 occurs 2 time(s)

谢谢你的帮助。

答案非常简单,它在我的 class 的扩展中,并通过添加 Equatable,

extension notificationManager: Equatable {

    static func ==(lhs: notificationManager, rhs: notificationManager) -> Bool {
    return lhs.fromwho.username == rhs.fromwho.username && lhs.forwho.username == rhs.forwho.username && lhs.activity.objectId == rhs.activity.objectId
}}

然后我只添加计数

     for item in orignalNotifs {
            notificationManager.Notifcounts[item] = (notificationManager.Notifcounts[item]  ?? 0) + 1
        }