Итак, я хочу отфильтровать массив с n сложностью. Цель состоит в том, чтобы распознать дубликат карты (по идентификатору) и сохранить карту со статусом «а» и добавить его в массив (отфильтровать дубликат со статусом, отличным от «а»). У меня есть следующий код:
struct Card {
var id:String
var status:String
init(id:String, status:String) {
self.id = id
self.status = status
}
}
let card1 = Card(id: "123", status: "a")
let card3 = Card(id: "43", status: "a")
let card4 = Card(id: "45", status: "a")
let card2 = Card(id: "123", status: "b")
let card5 = Card(id: "1234", status: "c")
let arrr = [card1,card3,card4,card2,card5]
func getCreditCardsOnly(creditCardsData:[Card]) -> [Card] {
var filter = [Card]()
for card in creditCardsData {
if !filter.contains(where: {$0.id == card.id && $0.status != "b"}) {
filter.append(card)
}
}
return filter
}
выход:
Карта (id: «123», статус: «a»), Карта (id: «43», статус: «a») , Card (id: "45", статус: "a"), Card (id: "1234", статус: "c")]
Как и хотелось, но сложность не равна ^ 2. Есть ли способ снизить сложность?