Collection を使おう
前述の動的配列は、昨日の日記でも触れたようにちょっと入り組んだメンバー構成をしており、変更内容が多大になるためコスト的に修正を見送りましたが、もう1つ別のユーザ定義型が同様に要素を後ろへ追加する動的配列であり、メンバー構成が非常に単純なので Collection に変更してみたくなりました。
今日の日記の最初のトピックの最後に書きましたが、ユーザ定義型をそのまま Collection の要素にすることはできませんので、ユーザ定義型をクラス化するか、独自の管理クラスを作る必要があります。
その前に確認しなければならないことがありました。Collection のデータ保持がどのように行われているか?などです。
VB のヘルプで Collection について調べると、
- VB には複数のコレクションが存在するが、実装が異なり代入互換性もない
- 実は、ユーザ(プログラマ)から扱えるコレクションは Collection だけで、上の内容は無視してもよい。(たぶん)
- Collection は列挙をサポートするが、列挙機能をVBから開発できない
- Collection はキー(String)と値(Variant)の組み合わせで要素を保持する
- Collection の保持している要素はインデックスによるアクセスもできる
のような、一般的なコンテナについての解説や、Forms や Printers のような実装が個別になっているコレクションについての解説は出てくるのですが、肝心の Collection の実装についての記述がぜんぜんみつかりません。Google にて検索したところ、
- Collection は要素を追加した順番に保持するリストで単純な Vector として扱ってもよい
- Collection に追加された Key を列挙する方法はない
- Collection の Key による検索はハッシュなどを利用していてそこそこ高速
といったことが追加でわかりました。特に、この中の最初の項目は重要です。どうして、これがヘルプで簡単に見つけることができないのか。
ヘルプのプログラミングガイドのコレクションについての一連の記述の中で、21日の日記(id:ladybug:20031121)にあった New によるクラスのインスタンス化のタイミングに関する記述がありました。それを New キーワードのヘルプに書けっての(苦笑)