« 2009年1月 | トップページ | 2009年5月 »

2009年4月

2009年4月28日 (火)

コンテナ

前回の投稿から随分と日がたってしまったが・・・今回はDelphiネタ。

Delphiでプログラミングをしているとデータやオブジェクトのコレクションを扱う時に希望のコンテナクラスが標準で用意されていなくて、自分で実装するか公開されている既存のクラスをどっかのサイトから落としてくるはめになるのだが、今回は自分で実装してみた。公開されている既存のクラスを利用するのもいいのだが、GPLだのMPLだのライセンス絡みで面倒なので、正直そのようなものは使いたくないので・・・wobbly。ちなみに、DelphiではDelphi6当たり?のContnrs.pasで、色々なコンテナクラスが追加されているので、それらを利用すればだいたい事が足りるのであるが・・

今回必要になったのは、順序付き連想コンテナ順序無し連想コンテナはキーと値のペアのデータ構造で表現され、キーを使って検索できるが、順序付き連想コンテナとは、これに、更に、単純なリストのようにインデックスを使って先頭からシーケンシャルにアクセスできるようにしたもの。つまり、順序無し連想コンテナではデータの登録順序などは意味を持たないが、データの登録順序などの順序を同時に表現したものとでも言えばいいのか?。うーんwobbly。.NETでいうとOrderedDictionaryクラスかな?。

とういうことでDelphiでこのクラスを実装してみた。Delphiでは、前述のContnrs.pasに順序無し連想コンテナとして、TBucketListクラスが用意され、内部ではキーのハッシュを使いデータを登録するバケットを分散させているのでので、キーを使って高速に検索できるだろう?とのことで、これを利用して、TOrderedBucketList、TObjectOrderedBucketList,TIntegerOrderedBucketListを作ってみた。

キーと値のペアでデータを登録するAddメソッド、指定の位置(インデックス)に挿入するInsertメソッド、指定のキーの値を取得するDataプロパティ(デフォルト)、指定の位置(インデックス)のキーや値を取得するDataAt、ItemAtプロパティ(TBucketListクラスでキーの事をItem、値をDataと呼んでいるのでここでもそれを踏襲しました)があります。命名規則やクラス設計のスタイルはなるべくDelphiに合わせてあるであしからず。SkyDriveからもContnrsEx.pasでダウンロードできます。先ほども書いたようにライセンスとか面倒な事は言いません。ご自身の責任でご自由に。300行そこらのコードですがbearing

« 2009年1月 | トップページ | 2009年5月 »

自作ソフトウェア

無料ブログはココログ

メモ