VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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()のサイズを大きくして値を設定できるわけですね。

以上、長くなってゴメンネ


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -