0
我在寫一個用於緩存類實例的組件。這些類別本身不是Comparable
,Hashable
或Equatable
。如果是這樣的話,相應操作的語義不一定會達到我們的目的,所以我們不能使用這些協議。基於對象標識刪除重複的類實例
對象可以被緩存w.r.t.多個鍵。因此,當向緩存詢問所有緩存對象的列表時,我需要從底層字典的值集中移除重複項 - 關於對象標識。
顯然,這樣做的工作:
var result: [C] = []
for c in dict.values {
if !result.contains(where: { (rc: C) in rc === c }) {
result.append(c)
}
}
return result
然而,這有二次運行時行爲。與使用上述協議(使用集合實現)時很容易獲得的線性或預期線性行爲相比,這是不好的。
那麼我們如何有效地刪除重複的w.r.t. Swift集合中的對象標識?