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集合中的对象标识?