TIPS:配列の一部だけをコピーするには?[C#/VB]ArrayクラスのCopyメソッド、ArraySegmentクラスなどを使い、配列の一部の要素だけをコピーする方法を説明。2つの配列をマージする方法も紹介する。配列の一部だけを別の配列にコピーしたいことがある。forループやforeachループを記述してもよいのだが、Arrayクラス(System名前空間)などの機能を使えば簡単に書ける。本稿では、その応用として、複数の配列を1つにマージする方法も紹介する。Frameworkの最初からあるものだが、本稿はそれ以降の内容も含んでいる。2015(またはそれ以降)が必要である。配列を一部だけをコピーするには?ArrayクラスのCopyメソッドを使うと、1行でコピーできる(次のコード)。ArrayクラスのCopyメソッドは、同じ配列内でコピーしたり、多次元配列間でコピーしたりもできる(後述)。配列aの(i+1)番目の要素を配列bの(j+1)番目の位置へと、順にn個をコピーする。配列aの(i+1)番目の要素を配列bの(j+1)番目の位置へと、順にn個をコピーする。4.5(またはそれ以降)であれば、ArraySegment構造体(System名前空間)も使える(次のコード)。それを配列に変換する。それを配列に変換する。ArraySegment構造体を使い、指定範囲を取り出して新しい配列を作る(上:C#、下:VB)このようにしてJavaScriptのsliceメソッドと同様な結果を得ることができる。ArraySegment構造体が扱える配列は1次元のものだけだ。上記2つの方法を実際のサンプルコードで示すと、例えば次のコンソールアプリのようになる。Module2通りの方法で配列の一部をコピーするコンソールアプリの例(上:C#、下:VB)同じ配列内にコピーするとどうなるか?ArrayクラスのCopyメソッドは、コピー先としてコピー元と同じ配列も指定できる。実際に試してみれば分かるが(次のコード)、コピー元の範囲の全ての要素がいったんバッファーにコピーされてからそれがコピー先の範囲へコピーし直されるような動作になる。"d"})が取り出され、それが4番目(="d"のところ)からの3個に上書きされるような動作になる。次のような動作ではない。b」となってしまうところだ。多次元配列をコピーするArrayクラスのCopyメソッドは、多次元配列でもコピーできる。コピー元とコピー先の次元は同じでなければならない。このとき、コピー先の配列のどの要素から書き込み(コピー)が開始されるかは、書き込み開始インデックスとして指定した値、配列の次元数、各次元の要素数により決まる。書き込みを行っている次元の配列から溢れた要素は次に書き込みを行う次元の配列の先頭から順に書き込まれる。次の例では、配列は2次元で、各次元の配列の要素数は3、書き込み開始インデックスは「0」、コピーする要素数は4個となっている。,」となっているのは2次元目の配列における2個目と3個目の要素にはコピーされないから)。2次元配列の一部をコピーする例を次のコードに示す。2次元配列の一部をコピーする例(上:C#、下:VB)応用:複数の配列をマージした配列を作るArrayクラスのCopyメソッドを使って、複数の配列を結合した配列を作れる。次のコードは、2つの配列を結合させた1つの配列を作る例だ。1次元配列の場合には、配列のCopyToメソッドやLINQ拡張を使ってもできる。32つの配列を1つにマージする例(上:C#、下:VB)まとめ配列の一部をコピーするには、ArrayクラスのCopyメソッドを使う。4.5以降)やLINQ拡張も活用できる。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。