投稿日 | : 2006/02/10(Fri) 20:15 |
投稿者 | : demontaki |
Eメール | : |
URL | : |
タイトル | : Re^7: 動的に2次元配列 |
どうもdemontakiです。
返信が遅くなってごめんね
下記の質問についてですが、もう御分かりになっているようですから
これ以上の補足は必要無いとも考えたのですが暇ですから書いてしまいます。
長文だけど勘弁してね
>配列同士一括コピーは同じサイズでしょうか。
この答えですが、配列同士をコピーする場合、
左辺のサイズは必ず右辺のサイズとなります。
(これがNo.5764が間違いであるという理由になります。)
つまり例として挙げられていた
>arr(10,5) <== arr_Conv(10, 5) 一括コピー可
結果はarr()がarr_Conv()と同じ(10,5)となりコピー可能となります。
>arr_Conv(10,5) <== arr_Conv(2, 5) 一括コピー不可
↑多分、arr(10,5) <== arr_Conv(2, 5)のことだと思うのですが
この場合も上記と同じくarr_Conv()がarr()に設定されますので
arr()がarr_Conv()と同じ(2,5)となり、一括コピーは可能となっています。
さらに解説するとNo.5764の誤りとしては
>ReDim arr_Conv(10, 5)
>arr_Conv() = arr()
>ReDim arr(10, 5)
>arr() = arr_Conv()
最初に配列が(10,5)となりますが右辺に(2,5)のサイズを設定したため
(10,5)から(2,5)にサイズが小さくなってしまいます。
その後、配列を(10,5)としても
再度、(2,5)の配列を右辺に持ってきているわけですから
元の(2,5)に戻ってしまうということになります。
この点を改善したのがNo.5766なっています。
>ReDim arr_Conv(10, 5)
>For i = 0 To 5
>arr_Conv(0, i) = arr(0, i)
>arr_Conv(1, i) = arr(1, i)
>arr_Conv(2, i) = arr(2, i)
>Next
>arr() = arr_Conv()
最初に配列を再定義して(10,5)にしておくのは同じなのですが
その後に一括コピーしていたのを単項目ごとに設定するように変更しています。
これによって、(10,5)のサイズを小さくしないで基となる配列の値を設定しています。
最後に右辺に(10,5)の配列を持ってくることで
arr()のサイズを大きくして値を設定できるわけですね。
以上、長くなってゴメンネ