This code should work:
class SomeClass: NSObject {
var displays: Int
var id: String
init(_ id: String, _ displays: Int) {
self.id = id
self.displays = displays
}
}
//Example of filtering
let array = [
SomeClass("1", 1),
SomeClass("3", 3),
SomeClass("4", 7),
SomeClass("8", 8),
SomeClass("2", 3),
SomeClass("7", 2),
SomeClass("5", 5),
SomeClass("1", 1),
SomeClass("3", 4),
SomeClass("2", 2),
SomeClass("7", 5),
SomeClass("6", 8)
]
var resultDictionary: [String : Int] = [:]
for element in array {
let lastDisplays = resultDictionary[element.id] ?? 0 //if object with this id is first time counted, the resultDictionary[element.id] will return nil and then lastDisplays will be equal to 0
resultDictionary[element.id] = lastDisplays + element.displays
}
var result = resultDictionary.map { SomeClass($0.key, $0.value) }
In the end the result array will contain SomeClass objects with counted displays.
Because dictionary have only unique keys, we can use it for counting displays sum.
NSCountedSet