| 
          
            □投稿者/ 魔界の仮面弁士 (812回)-(2008/08/13(Wed) 14:59:12)
              | ■23390 / inTopicNo.13) | Re[6]: 2次元配列  Redimについて |  
 
          
            
              
                |  | 2008/08/13(Wed) 15:09:17 編集(投稿者) 
 ■No23388 (επιστημη さん) に返信
 > 次元数を変えなければ縦でも横でも伸ばし放題かと思ってたです。
 > ■■■
 > ■■■
 > が
 > ■■■□□
 > ■■■□□
 > □□□□□
 > ってなれるとばっかり。
 
 配列内の各項目は、メモリ上の連続した位置に配置されますが、
 2 次元配列の場合、それは下記のようなイメージで配置されます。
 
 
 《配列指定が(2, 1)の時》
 00, 01, 02,
 03, 04, 05
 
 
 《配列指定が(2, 3)の時》
 00, 01, 02,
 03, 04, 05,
 06, 07, 08,
 09, 10, 11
 
 
 《配列指定が(4, 3)の時》
 00, 01, 02, 03, 04,
 05, 06, 07, 08, 09,
 10, 11, 12, 13, 14,
 15, 16, 17, 18, 19
 
 
 1 次元目の値を変更してしまうと、メモリの再配置が必要になってしまいます。そのため、
 言語仕様上、Preserve で動かせるのは 2次元目(最右側の次元)のみに制限されているのだとか。
 http://support.microsoft.com/kb/75517/ja
 
 もっとも、内部的には別の大きさの配列を用意して、そこに元のデータを
 コピーしているのだけなのですけれどね。(VB6 でも VB.NET でも)
 
 # 理論上は、そのコピーの手間さえ増やせば、任意の次元サイズを変更できるのだから、
 # 将来のVB では、Preserve の制限を外して欲しいなぁとか思ってみたり。
 ## とはいえ、最近は System.Collections 配下のクラスを使えば済む事が多いので、
 ## 個人的には今の制限のままでも、ちっとも困らないというのも事実なのだけれど。
 
 |  解決済み |