|
▼ドカ さん:
こんにちは
アルゴリズムの説明と追加質問の回答の前に、Dictionaryというものを
さわりだけ、さらっとご説明します。(既にご存知であればスルーしてください)
(以下の説明の中で、Dictionaryの変数を、とりあえず Dic とします)
本来なら、参考書やネットで、わかりやすいものを見つけて読んでいただくほうが
私のつたないメモよりは、ずっと役立つとは思いますが。
Dictionary とは、文字通り、「辞書」です。
たとえば英和辞書があって、Summer という項目を引けば、その内容を見ることができますね。
で、この中身は、以下に説明するような配列です。
ですので、Dictionaryのテクニカルタームとしての日本語訳は、一応「連想配列」ということに
なっています。
この「連想」が、人工知能的な響きがあって、だから難しいものなんだろうなと敬遠される
要因にもなっているかもしれませんが、実は、すごく簡単で便利なものです。
Dictionary の構造は キー(辞書の索引)とデータです。
で、このキーとデータが、それぞれ「1次元配列」におさめられています。
(プロパティでいうと Dic.Keys がキーの配列で、Dic.Itemsがデータの配列です)
1次元配列というのは、シートでいいますと「行」にあたります。
Sheet1の1行目にキーが記載されていて、それとは別に、Sheet2の1行目にデータが記載されている
そんなイメージです。
通常の配列と異なる点としては、もちろん、キーで直接データを呼び出せるということが
ありますが、もう1つ、通常の配列ですと、あらかじめ配列の大きさを宣言する必要がありますね。
たとえば Dim V(1 to 10) これは1次元配列で要素が10個のもの。
ここに11個目の要素を追加することは(普通のやり方では)不可能です。
必要であれば ReDim PreServe V(1 to 11) といったように追加の都度、配列サイズを変更します。
でも、Dictionaryの場合は、おかまいなしに、どんどん登録していくことができます。
で、このデータはVariant型で用意されていますので、どんな値でもいれておくことができますし
たとえば、何も登録されていないキーに対して、Dic(新しいキー)=dic(新しいキー)+100 という演算も
できます。これは、たとえばシート上で空白のA1があったとして別のセルで =A1+100 とやっても
エラーにならずに計算結果がでるのと同じと考えてください。
大きさを考えないで、どんどん追加できる。
何でも登録できる。
直接呼び出すことができるので、データの並び順に悩まず、何回か前に登録したデータに対して
簡単に加算減算、上書きができる。
で、書いた内容を1つずつ取り出すこともできますし、上で説明したように、
中身は1次元配列そのものですから、配列として取り出したものを処理することもできる。
このようなものですので、むしろ、初心者向けんのツールだということもできます。
実は、大量データを相手に複雑なマッチング処理を行おうとすると、
処理にふさわしい並び替え => その処理に必要な複雑なマッチングロジック
これが最も処理時間が早くなるほうほうなんですが、初心者のみならず、このアルゴリズムを
正確に実装するのは、大変に骨が折れます。
Dictionaryは、深く考えずにコードを書けるということも、さることながら、その処理効率も
「そんなに悪くない」というレベルになっています。
是非、今後のコード作成で使ってみてください。
|
|