http://blogs.wankuma.com/myugaru/archive/2008/03/05/126453.aspx のつづき
非常に簡単な方法を導き出しました。それは・・・
LinkedListを拡張メソッドで拡張
です。
現状のLinkedList内部仕様
・キーの概念は無い。値のみが保持されるリスト
・各ノードがPrev(直前ノード),Next(直後ノード)へのポインタを保持する双方向リストで実装されている。先頭ノードはFirst、最終ノードはLastで取得できる。実際にはLastとFirstが繋がっている(LastのNextがFirstであり、FirstのPrevがLastということ)。したがって正確には双方向循環リストである。一番の利点は追加削除がポインタ張替えだけなのでかかるコストが少ない事である。
・値は個々のノードのValueプロパティへ保持されている。
・列挙はforeachルーチンで値に対して行われるものだけがある。ノードでの列挙やForEachメソッドでの列挙はできない。
・検索は特定の値やノードを発見する(つまりEqualsなもの)だけが実装されている。検索条件をユーザーが決めるもの(つまりPredicateを渡すようなもの)はない。
拡張後は以下の機能が追加されます。
●列挙
ノードで列挙を行うForEachメソッドを追加する。
列挙中にNextノード以外(Current含め)削除可能な配慮を施す。
●検索
Predicateによるノードの検索を追加する。
●ソート済みを維持する値の追加
キーはユーザー自身がComparisonあるいはIComparerにて提供する。
LinkedListそのものはキーの存在を把握しないためキー重複が可能。
1)ComparisonあるいはIComparerで追加位置を
決め追加することでソート済みを維持する
2)キーを変更し再ソートも可能とする
●全体のソート
重くなりそうなので未実装かも。ソート済みの維持は追加ごとに気を配れば良いね。
・・・まあすぐに出来そうですね。一安心w
>επιστημηさん
>C++/CLIに浮気しない?
>STL/CLRなら重複を許す辞書: multimap がありますよん(うひひ
いやいやいやww
あくまでもC#erとして生涯貫きます!浮気はしませんぞ!