ヘッダー

VB.NET 2002, VB.NET 2003, VB2005

配列を別の配列にコピーする

1.まるごとコピーする例

VB.NET2002対応 VB.NET2003対応 VB2005対応 

Dim i1() As Integer = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Dim i2() As Integer

i2 = i1.Clone

この例では i2 の値は 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 となる。

メモ:一般的なオブジェクトのコピー方法と同じです。

 

2.コピーする要素数を指定する例

以下の例では、配列の6番目の要素までをコピーする。

VB.NET2002対応 VB.NET2003対応 VB2005対応 

Dim i1() As Integer = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Dim i2() As Integer = Array.CreateInstance(GetType(Integer), 8)

Array.Copy(i1, 0, i2, 0, 6)

この例では i2 の値は 0, 1, 2, 3, 4, 5, 0, 0 となる。

メモ:コピー先の配列はあらかじめコピー数以上の要素数を持っている必要があります。

 

3.コピーする位置を指定する例

以下の例では、配列の2番目の要素から4つを、コピー先の要素の3番目以降にコピーする。

VB.NET2002対応 VB.NET2003対応 VB2005対応 

Dim i1() As Integer = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Dim i2() As Integer = Array.CreateInstance(GetType(Integer), 8)

Array.Copy(i1, 1, i2, 2, 4)

この例では i2 の値は 0, 0, 1, 2, 3, 4, 0, 0 となる。

メモ:コピー先の配列はあらかじめコピー数以上の要素数を持っている必要があります。

 

.コピーするバイト数を指定する例

以下の例では、コピー元の配列から20バイトをコピー先の配列にコピーする。Integer型は要素1つで4バイトあることに注意すること。

VB.NET2002対応 VB.NET2003対応 VB2005対応 

Dim i1() As Integer = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Dim i2() As Integer = Array.CreateInstance(GetType(Integer), 8)

Buffer.BlockCopy(i1, 0, i2, 0, 20)

この例では i2 の値は 0, 1, 2, 3, 4, 0, 0, 0 となる。

メモ:Buffer.BlockCopyはコピーする位置をバイト単位で調節することができるので、連続したビットシフトのような演算も可能です。

 


VB6対応 VB6で配列をまるごとコピーするには、i2 = i1 のように単純に代入するだけです。このとき、i2は動的配列である必要があります。バイト位置やバイト数を指定してコピーするにはAPI関数を使うこともできますが、一般的にはループを回して行います。