配列を使うとデータの扱いが簡単になったりします。

配列については
配列って何?

を読んでみましょう。

さて、データを一気に設定するとはどういうことでしょうか?

いってみれば、DVDケースに5枚分、一度に収納する、職人芸のような感じでしょうか。

そんな命令は
COPYです。

COPY コピー先配列 [,コピー先オフセット],コピー元配列 [[,コピー元オフセット] , コピー要素数]
という使い方ですが、どういうことでしょうか?

では、例で試して見ましょう。

' Aの配列を5個に設定
DIM A[5]
' Bの配列を3個に設定
DIM B[3]
' 5回繰り返し
FOR I = 0 TO 4
  ' Aの配列位置にI+1の値を設定
  A[I]=I+1
NEXT I

' 配列をコピーする
COPY B, A

FOR I = 0 TO 4
  ' Bの中身を表示する
  PRINT B[I]
NEXT I

2015032505

さて、COPYの最初の引数はコピー先配列です。
この場合、Bの配列に値を設定するということになります。

そして、コピー元配列。
ここでは、Aです。

ですから、Aの配列の中身をBに一気に入れます。

ここで、問題なのは、Bの配列は3個なのに、Aの配列は5個という点です。

これはどうなるのでしょうか?

それは、Bの配列が大きくなって、Aの配列と同じ大きさになります。
つまり、Bの配列数も5個になります。

そして、表示すると見事にBにコピーされています。

2015032506


ちなみに、二次元配列以上の場合は拡張されません。
' Aの配列を5x3個に設定
DIM A[5,3]
' Bの配列を3x2個に設定
DIM B[3, 2]
' 5回繰り返し
FOR I = 0 TO 4
  FOR J = 0 TO 2
    ' Aの配列位置にIx3+J+1の値を設定
    A[I, J]=I*3+J+1
  NEXT J
NEXT I

' 配列をコピーする
COPY B, A

FOR I = 0 TO 4
  FOR J = 0 TO 2
    ' Bの中身を表示する
    
PRINT B[I, J]
  NEXT J
NEXT I

2015032501

実行するとエラーになります。

2015032502


動かすには
DIM B[5, 3]
とAの配列数と同じにします。

続いてオフセットの使い方ですが、途中からコピーしたいときに使います。

' Aの配列を5x3個に設定
DIM A[5,3]
' Bの配列を3x2個に設定
DIM B[3, 2]
' 5回繰り返し
FOR I = 0 TO 4
  FOR J = 0 TO 2
    ' Aの配列位置にIx3+J+1の値を設定
    A[I, J]=I*3+J+1
  NEXT J
NEXT I

' 配列をコピーする(Aの(2 + 1)個目から3個分コピーする
COPY B, A, 2, 3

FOR I = 0 TO 2
  FOR J = 0 TO 1
    ' Bの中身を表示する
    
PRINT B[I, J]
  NEXT J
NEXT I

2015032503


上記のように配列数が変わらないようにコピーすると
コピーできるようです。(一次元の場合。2次元以上は1次元だけコピーされます。)

2015032504


最後におさらいすると
COPY B, A, 2, 3

Bの配列にAの配列の中身をコピーします。
Aの配列の(2+1)番目の値から、3個分コピーします。

(2+1)というのは配列は0始まりのため0, 1, 2の3番目になるからです。

ただし、多次元配列の場合は、まったく同じ個数の場合コピーされますが
それ以外の場合は、制限があるというわけです。