2016-06-02 7 views
1

現在のバージョンのSwiftでは、方法indexOfは明らかに線形時間です。私の配列が大きいと、indexOfを頻繁に呼び出す必要があるので、これはかなり無駄になります。どのように私たちはそのArrayをサブクラス化することができますArrayを拡張/サブクラス化してアイテムのインデックスを作成するにはどうすればよいですか?

  • 我々は要素を挿入するたびに、ハッシュマップ
  • たびの配列の自動魔法のインデックスそれは我々が要素を削除し、それがインデックスから削除し
  • 要素を後で見つけようとするとすぐに返されます。

この配列をUITableViewに使用します。辞書を使うことを考えましたが、

  • 注文は保存されていますか?
  • インデックスを指定してオブジェクトを取得できますか?
  • 特定のインデックスでオブジェクトを取得すると、それは線形時間または一定時間になりますか?

Array.indexOfという固定の固定時間バージョンを使用します。

+1

なぜ辞書を使用しないのですか? –

+0

@MatiasElorriagaこれは私のUITableView用の私のデータソースになります。辞書を使用している場合は、索引で検索できますか? '' 'let item = myDict [row]' ''そしてそれは整理されていますか? – TIMEX

+0

はい、キーで検索することができます(インデックスをキーとして使用することもできます)。いいえ、辞書には注文がありません。 –

答えて

1

Arrayをサブクラス化しないでください。インスタンス変数として配列と辞書の両方を持つ新しいクラスを作成します。配列を配列に使用し、ディクショナリをアイテムから配列インデックスにマップします。挿入、参照、および削除のための独自のルーチンを記述する必要があります。キーと値にジェネリック型を使用すると、そのクラスは将来他のプロジェクトで役立ちます。私はObjective-Cプロジェクトで数年前に(ジェネリックスなしで)これを行った。

もっと考えてみると、配列の途中から項目を挿入したり削除したりすると、辞書のインデックスがオフになるため、代わりにツリーを使うべきだと思います。ツリー構造は、両方の順序を保持し、合理的に高速なルックアップを可能にします。

+0

I havenこれを使用していませんが、それを調べる価値があります:https://github.com/lorentey/BTree – EricS

+0

'Struct'のため、サブクラスをサブクラス化できません! – Lumialxk

関連する問題