C#を使っていると、複数の配列を一つにまとめたいという場面がよくあります。たとえば、データの一覧を統合したいときや、条件別に分けられた配列をひとまとめにしたいときです。しかし、C#の配列はサイズが固定であるため、JavaScriptやPythonのように簡単には結合できないという点に注意が必要です。
本記事では、C#で配列を結合するための代表的な方法を5つ紹介し、それぞれのメリットや注意点も解説します。初心者の方でも理解しやすいよう、具体的なコード例とともに解説していきます。
もっとも基本的な方法は、Array.Copy
を使って結合する方法です。これにより、元の配列の要素を新しい配列に順番にコピーすることができます。
int[] array1 = { 1, 2, 3 };
int[] array2 = { 4, 5, 6 };
int[] result = new int[array1.Length + array2.Length];
Array.Copy(array1, 0, result, 0, array1.Length);
Array.Copy(array2, 0, result, array1.Length, array2.Length);
Console.WriteLine(string.Join(", ", result));
// 出力: 1, 2, 3, 4, 5, 6
この方法は、明示的に新しい配列を作成し、手動でコピーするため、配列のサイズが事前にわかっている場合に適しています。
LINQを使うと、Concat
メソッドで簡潔に配列を結合できます。これは可読性が高く、コードがすっきりする利点があります。
using System;
using System.Linq;
int[] array1 = { 1, 2, 3 };
int[] array2 = { 4, 5, 6 };
int[] result = array1.Concat(array2).ToArray();
Console.WriteLine(string.Join(", ", result));
// 出力: 1, 2, 3, 4, 5, 6
ただし、.ToArray()
を忘れると、結合後も IEnumerable<int>
のままとなってしまう点に注意が必要です。
可変長で扱いたい場合は、List<T>
を使う方法も便利です。あとから要素を追加したり、結合したりするのが容易です。
List<int> list = new List<int>(array1);
list.AddRange(array2);
int[] result = list.ToArray();
Console.WriteLine(string.Join(", ", result));
// 出力: 1, 2, 3, 4, 5, 6
この方法は、配列のサイズが不確定であったり、繰り返し結合を行う場合に最適です。
大量のデータを高速に結合したい場合は、Buffer.BlockCopy
が使えます。ただし、この方法は型がbyte[]
などのプリミティブ型である必要があります。
byte[] array1 = { 1, 2, 3 };
byte[] array2 = { 4, 5, 6 };
byte[] result = new byte[array1.Length + array2.Length];
Buffer.BlockCopy(array1, 0, result, 0, array1.Length);
Buffer.BlockCopy(array2, 0, result, array1.Length, array2.Length);
Console.WriteLine(string.Join(", ", result));
// 出力: 1, 2, 3, 4, 5, 6
この方法は高速ですが、型の制約があるため、状況によって使い分ける必要があります。
複数の配列を結合する処理が頻繁に出てくる場合は、汎用的なメソッドを用意しておくと便利です。
public static T[] MergeArrays<T>(params T[][] arrays)
{
int length = arrays.Sum(arr => arr.Length);
T[] result = new T[length];
int offset = 0;
foreach (var array in arrays)
{
Array.Copy(array, 0, result, offset, array.Length);
offset += array.Length;
}
return result;
}
// 使用例
int[] a = { 1, 2 };
int[] b = { 3, 4 };
int[] c = { 5, 6 };
int[] merged = MergeArrays(a, b, c);
Console.WriteLine(string.Join(", ", merged));
// 出力: 1, 2, 3, 4, 5, 6
このようにすることで、何個でも配列を渡して結合できるので、拡張性の高い実装が可能です。
配列を結合する際には、以下のような点にも注意が必要です。
Array.Copy
を使う場合は、結合後のサイズをあらかじめ計算しておく必要があります。List<T>
の利用を検討するとパフォーマンス面で有利です。Buffer.BlockCopy
は汎用性が低いため、用途が限定されます。Concat
、複雑になってきたら自作関数で統一するのがおすすめです。C#で配列を結合する方法は、用途や状況に応じてさまざまな選択肢があります。簡潔さを求めるならConcat
、効率性を求めるならArray.Copy
やBuffer.BlockCopy
、拡張性を重視するなら自作関数やList<T>
の利用が有効です。
目的に応じた最適な方法を選び、実際の開発に活用してみてください。