データ操作

[C#] 配列のコピーを生成する(Array.Copy)

配列のコピーを生成するには、Array.Copyを使うと簡単です。

構文

実現したいコピー方法により引数を使い分けてください。

構文1(コピーする要素数のみ指定してコピーする)

Array.Copy(<コピー元配列>, <コピー先配列>, <コピーする要素数>)

構文2(コピーする位置と要素数を指定してコピーする)

Array.Copy(<コピー元配列>, <コピー元の開始位置>, <コピー先配列>, <コピー先の開始位置>, <コピーする要素数>)

サンプル

例1)配列をコピーする


// コピー元配列
string[] strArr = { "東京", "大阪", "名古屋" };

// コピー先配列を定義する(空の配列)
string[] cpArr = new string[strArr.Length];

// 配列をコピーする
Array.Copy(strArr, cpArr, strArr.Length);

strArr.Lengthで配列の要素数を指定しています。(上例だと3になります)

結果

cpArr → { "東京", "大阪", "名古屋" }

例2)位置を指定して配列をコピーする


// コピー元配列
string[] strArr = { "東京", "大阪", "名古屋", "札幌", "福岡" };

// コピー先配列を定義する(空の配列)
string[] cpArr = new string[strArr.Length];

// 配列をコピーする
Array.Copy(strArr, 2, cpArr, 1, 3);

コピー元の3要素目から3要素分を、コピー先の2要素目以降にコピーします。

結果

cpArr → { null, "名古屋", "札幌", "福岡", null }

[注意!] ダメな例

以下は参照のコピーとなってしまうダメなコピー例です。


// コピー元配列
string[] strArr = { "東京", "大阪", "名古屋" };

// 配列をコピーする →NGです。
string[] cpArr = strArr;

この方法でも一見コピーできたように見えてしまいますが、
この方法だと参照のコピーになってしまいます。

このコピーを行った後に cpArrの値を修正すると、strArrの値も変わってしまいます。
(変数名はstrArrとcpArrで異なりますが、実体は同じ配列を参照しているためです。)

実現したいコピーがこの動きで問題なければよいですが、別々の配列としてコピーしたい場合はArray.Copyをご使用ください。

備考

  • 上ではstring配列を例としていますが、他の型の配列もOKです。

関連記事

-データ操作
-