2次元配列のコピーについて


ペン  2008-03-13 04:57:18  No: 139252

VB6.0を使用しております。

表題のように2次元配列をコピー処理について質問があります。
普通、2次元配列を別の1次元配列にコピーする際には for 文を使うかと思いますが、パフォーマンスをよくしたいです。
API関数の CopyMemory を使えばよいみたいなこと見つけたのですが、使用方法がよくわかりません。
ご教授お願いします。

Redim Array1(1000)
Call CopyMemory(ByVal Array1(0), ByVal Array2(0, 0), LenB(Array2))  ??

 Array1 1次元配列
 Array2 2次元配列


やじゅ  2008-03-13 05:13:46  No: 139253

VBでAPIを使おう第2回:配列変数をコピーする
http://www6.ocn.ne.jp/~mzworks/vb/vb_club_api_002.htm


やじゅ  2008-03-13 05:18:29  No: 139254

あ、2次元配列か・・・・、どうなるんやろ。


ペン  2008-03-13 05:21:54  No: 139255

やじゅさん早急な回答ありがとうございます。
上記のサイトを参考に作成してみたのですが、①と②とで同じ結果が得られませんでした。
どこがまちがっているのでしょうか?


For i = 0 To Max
     Array1(i) = Array2(i, 1)
Next


Call CopyMemory(Array1(0), Array2(Max, 1), LenB(Array1(0)))


  2008-03-13 07:50:53  No: 139256

メモリ管理の関係で一括コピーはちょっと思いつきません。

私はやじゅさんが提示してくれたHPから、CopyMemoryの毎回の
ループが早いと思います。

#そこまで速度を追求するならVBを使わない手もあるかと


K.J.K.  2008-03-14 00:25:38  No: 139257

# とりあえず、http://ja.wikipedia.org/wiki/%E4%B8%B8%E6%95%B0%E5%AD%97
# もチェックしておいてみるとか。

で、なぜByValを付けるのでしょうか?
また、CopyMemoryが有効なのは、内容が数値型である(というよりは可変長文字列や可変長配列、オブジェクト型を含まない)場合だけですが、その点は大丈夫
なのでしょうか?

なお、Native-Code-Compileならば、普通に順次代入をしていっても、
最速とまでは言えませんが十分な速度が期待できるとは思います。

むしろ、速度を気にしたいのであれば、無駄な操作が必要ないような仕組みに
すべきでしょう。例えばこのデータの複製は必要なのでしょうか? また、2次元
で配列を保持する必要はあるのでしょうか? その辺りでも注意をしてみるべきかと。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加