■23390 / inTopicNo.13) |
Re[6]: 2次元配列 Redimについて |
□投稿者/ 魔界の仮面弁士 (812回)-(2008/08/13(Wed) 14:59:12)
|
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 配下のクラスを使えば済む事が多いので、 ## 個人的には今の制限のままでも、ちっとも困らないというのも事実なのだけれど。
|
解決済み
|