スウィフト3 Collection
インデックスは、Equatable
ではなく、Comparable
に準拠している必要があります。スウィフト3およびカスタムリンクリストコレクションタイプのインデックス
ここで全文を読むことができますswift-evolution/0065。
通常インデックスは を効率的データ構造のルートから要素へのパスをコードする一つまたは二つのintで表すことができる:ここでは
は、関連する引用です。自由にパスのエンコーディングを選択できるので、 は、インデックスが で安価に匹敵するように選択することができると思います。これは、標準ライブラリを実装するために必要なすべてのインデックスの場合に該当しました。この変更を調査中に調査されたのは です。
私のカスタムリンクリストコレクションの実装では、ノード(後続を指す)は不透明なインデックスタイプです。ただし、2つのインスタンスがある場合、チェーンの重要な部分のトラバーサルを危険にさらすことなく、他が先行するかどうかを判断することはできません。
私は好奇心が強いのですが、でリンクリストのインデックスをComparable
で実装する方法はありますか?O(1)複雑ですか?
私が現在持っている唯一のアイデアは、インデックスを前進させながらインデックスをインデックスとしてインデックスとして格納し、それらの値を比較しながら何らかのステップをカウントすることです。
このソリューションの深刻な欠点は、コレクションを変更する際にインデックスを無効にする必要があることです。そして、それは配列にとって妥当と思われますが、リンクリストには大きな利点があります。変更されていないノードのインデックスは無効になりません。
EDIT: それは、単一リンクリストはフロントを挿入実装することを想定し、コレクションのプロパティとして二つの追加の整数のコストで行うことができ、フロントとを削除するバックを追加します。途中で干渉している人は、とにかく壊れてしまうでしょう。O(1)複雑さが必要です。
これは興味深い質問です(私はこの時点で答えはありません)。ちょうど発言:2つの関連するプロトコルがあります:コレクションとRandomAccessCollection。後者はすべての添え字と索引操作にO(1)の複雑さが必要ですが、前者は複雑ではありません。 - コードレビューに関連するものがありました:http://codereview.stackexchange.com/questions/133141/copy-on-write-linked-list-with-value-semanticsフルソースへのリンクはもはや機能しませんが、私が正しく覚えていれば、Timはあなたの補遺に記述したとおりに正確に行いました。 –