クラスのインスタンスをキャッシュするためのコンポーネントを作成しています。クラスはそれ自体ではありませんComparable
,Hashable
またはEquatable
です。もしそうであれば、それぞれの操作のセマンティクスが必ずしも私たちの目的に役立つわけではないので、それらのプロトコルを使うことはできないと考えましょう。オブジェクトIDに基づいて重複するクラスインスタンスを削除します。
オブジェクトはw.r.t.にキャッシュできます。複数のキー。だから、キャッシュにすべてのキャッシュされたオブジェクトのリストを要求するときは、オブジェクトIDに関して、基礎となる辞書の値セットから重複を削除する必要があります。
明らかに、これは仕事をしていません:
var result: [C] = []
for c in dict.values {
if !result.contains(where: { (rc: C) in rc === c }) {
result.append(c)
}
}
return result
しかし、これは二次実行時の動作を持っています。上記のプロトコル(set実装を使用して)を使用するときに得やすい線形または予想の線形動作と比較すると、これは悪いことです。
どのようにすれば、重複したw.r.tを効率的に削除できますか。 SwiftコレクションのオブジェクトID