【发布时间】:2020-02-27 12:53:20
【问题描述】:
所以我想过滤一个复杂度为 n 的数组。 目标是识别重复卡(通过 id)并保留状态为“a”的卡并将其添加到数组中(过滤掉状态与“a”不同的重复卡) 我的代码如下:
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”),卡(id:“45”,状态:“a”),卡( id:“1234”,状态:“c”)]
如您所愿,但复杂度为 n^2。 有没有办法降低复杂度?
【问题讨论】:
-
所以如果数组中还有
Card(id: "1", status: "b"),那应该保留在数组中,对吧?您只想过滤掉重复的status是b?如果有 2 张卡的 id 和状态相同,a和c怎么办? -
@DávidPásztor ,是的,你说得对。如果有 2 张卡具有相同的 id 和 a 和 c 的状态,我也想要它们。不与状态 a 重复
标签: arrays swift filter code-complexity