Чтобы воспроизвести ваш код, я собираюсь смоделировать класс SolData
и добавить инициализатор, чтобы упростить создание экземпляров:
class SolData {
var uid: String = ""
var id: String = ""
init(uid: String, id: String) {
self.uid = uid
self.id = id
}
}
Давайте создадим несколько экземпляров:
let zero = SolData(uid: "sdasd", id: "jmX3")
let one = SolData(uid: "gfd", id: "jmX3")
let two = SolData(uid: "hgfd", id: "jmX3")
let three = SolData(uid: "terw", id: "jmX3")
let four = SolData(uid: "fgg", id: "GFdda")
И сгруппировать их в массив:
let array = [zero, one, two, three, four]
Чтобы получить только экземпляры с уникальными идентификаторами, давайте использовать reduce(into:)
:
let uniqueIds = array.reduce(into: Set<String>(), { $0.insert($1.id)})
Свойство count uniqueIds
- это число уникальных идентификаторов в array
:
let uniqueIdsCount = uniqueIds.count //2
Если вам нужен массив экземпляров с уникальными идентификаторами, используйте следующее:
let instancesWithUniqueIds = array.reduce(into: [SolData]()) { accumulator, element in
if accumulator.allSatisfy({ $0.id != element.id}) {
accumulator.append(element)
}
}
accumulator.allSatisfy({ $0.id != element.id})
возможно заменить на accumulator.contains(element)
и сделать SolData
соответствующим Hashable
.