|
▼ドカ さん:
こんにちは
遅くなりました。
アルゴリズムですが、部分、部分のコードの使い方などは既にご説明していますので
アップされた実例(3列1組が2組ある例)から転記イメージが、どのように作られるかを、
簡単にお話します。
まず、登場するDictionaryは 3 つあります。
Dic のキーは名前です。データとして、その名前の転記イメージをセットする「子Dictionary」
(のオブジェクト)を格納してあります。
この子Dictionaryが、どのように作られるかの説明になります。
説明の中では、「親Dic」、「子Dic」とよびます。
また、3列1組のブロックの最初の列番号、1,4,7,・・・・「ブロック」とよびます。
子Dic は キーが 当該の名前の当該ブロック内での行番号になります。
また、データは、3要素 X 2 ブロック = 6 個の要素を持つ1次元配列です。
もう1つ、dicRow があります。
これは、当該の名前の当該ブロック内での行番号取得用のカウンターで、
キーが 名前/ブロック、データが 行番号です。
さて、処理は、各行、左から右に、各ブロックを処理していきます。
で、名前ごとに、それぞれ処理がされるのですが、それらの処理はセットする子Dicが
異なるだけで、どの名前でも同じですので、ここでは "加藤" を例に説明します。
1.まず、2行目の2ブロック目(4列目)の加藤が最初に処理されますね。
2.で、親Dic("加藤") には、まだ何も登録されていませんので、加藤用の子Dicを生成して
ここにおさめます。
3.dicRow の 加藤/4 に 1を加算します。この時点では 加藤/4 の登録が無いので
結果は 1 になります。
4.加藤用の子Dicのキーの 1 が、まだ生成されていないので、以下のイメージで
初期化データをセットします。
+------+------+-----+------+------+-----+
| | | | | | |
+------+------+-----+------+------+-----+
5.で、ここに、今処理している2行目の加藤のデータ、加藤、花、4 をセットします。
結果は以下のようになります。
+------+------+-----+------+------+-----+
| | | |加藤 |花 |4 |
+------+------+-----+------+------+-----+
6.次に、加藤でいえば、4行目の1番目のブロック(列番号は1)のデータを処理します。
既に親Dicには火等が登録されているので2.は行いません。
7.dicRow の 加藤/1 に 1を加算します。この時点では 加藤/1 の登録が無いので
結果は 1 になります。
8.加藤用の子Dicの 1 は、4.で既に作成されていますので、4.は行いません。
9.すでにある子Dicのデータに4行目の1番目のブロックの加藤、花、4 をいれます。
結果は以下のようになります。
+------+------+-----+------+------+-----+
|加藤 |花 |4 |加藤 |花 |4 |
+------+------+-----+------+------+-----+
10.4行目の2番目のブロック(4列目)の加藤、みかん、2 を処理します。
11.既に、親Dicはできているので、2.は行いません。
12.DicRowの加藤/4 に 1を加算します。この時のdicRowの加藤/4 は 3.で、
既に 1 になっていますので、結果は 2 になります。
13.加藤用の子Dicのキーの 2 がまだ生成されていないので、以下のイメージで
初期化データを追加します。
+------+------+-----+------+------+-----+
| | | | | | |
+------+------+-----+------+------+-----+
14.ここに、加藤、みかん、2 をセットします。
結果は以下のようになります。
+------+------+-----+------+------+-----+
| | | |加藤 |みかん|2 |
+------+------+-----+------+------+-----+
15.これまでの結果、加藤用の子Dic は以下の姿になっています。
+------+------+-----+------+------+-----+
|加藤 |花 |4 |加藤 |花 |4 |
+------+------+-----+------+------+-----+
| | | |加藤 |みかん|2 |
+------+------+-----+------+------+-----+
16.他の名前についても、それどれ同様の処理がなされ、各名前の子Dicが
できあがります。
17.親Dicから子Dicを順番に取り出し、できあがっている子Dicの配列イメージを
順番にSheet2に落とし込みます。
|
|