配列を使うとデータの扱いが簡単になったりします。
配列については
配列って何?
を読んでみましょう。
さて、データを一気に設定するとはどういうことでしょうか?
いってみれば、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
さて、COPYの最初の引数はコピー先配列です。
この場合、Bの配列に値を設定するということになります。
そして、コピー元配列。
ここでは、Aです。
ですから、Aの配列の中身をBに一気に入れます。
ここで、問題なのは、Bの配列は3個なのに、Aの配列は5個という点です。
これはどうなるのでしょうか?
それは、Bの配列が大きくなって、Aの配列と同じ大きさになります。
つまり、Bの配列数も5個になります。
そして、表示すると見事にBにコピーされています。
ちなみに、二次元配列以上の場合は拡張されません。
' 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
実行するとエラーになります。
動かすには
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
上記のように配列数が変わらないようにコピーすると
コピーできるようです。(一次元の場合。2次元以上は1次元だけコピーされます。)
最後におさらいすると
COPY B, A, 2, 3
は
Bの配列にAの配列の中身をコピーします。
Aの配列の(2+1)番目の値から、3個分コピーします。
(2+1)というのは配列は0始まりのため0, 1, 2の3番目になるからです。
ただし、多次元配列の場合は、まったく同じ個数の場合コピーされますが
それ以外の場合は、制限があるというわけです。
配列については
配列って何?
を読んでみましょう。
さて、データを一気に設定するとはどういうことでしょうか?
いってみれば、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
さて、COPYの最初の引数はコピー先配列です。
この場合、Bの配列に値を設定するということになります。
そして、コピー元配列。
ここでは、Aです。
ですから、Aの配列の中身をBに一気に入れます。
ここで、問題なのは、Bの配列は3個なのに、Aの配列は5個という点です。
これはどうなるのでしょうか?
それは、Bの配列が大きくなって、Aの配列と同じ大きさになります。
つまり、Bの配列数も5個になります。
そして、表示すると見事にBにコピーされています。
ちなみに、二次元配列以上の場合は拡張されません。
' 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
実行するとエラーになります。
動かすには
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
上記のように配列数が変わらないようにコピーすると
コピーできるようです。(一次元の場合。2次元以上は1次元だけコピーされます。)
最後におさらいすると
COPY B, A, 2, 3
は
Bの配列にAの配列の中身をコピーします。
Aの配列の(2+1)番目の値から、3個分コピーします。
(2+1)というのは配列は0始まりのため0, 1, 2の3番目になるからです。
ただし、多次元配列の場合は、まったく同じ個数の場合コピーされますが
それ以外の場合は、制限があるというわけです。
あの、続きまだですか?<br>
すごくたのしみなんですけど…