はじめに
C#における配列は、同じ型のデータを効率的に格納する基本的なデータ構造です。
しかし、標準の配列はサイズが固定されているため、動的に要素を追加するにはいくつかのテクニックを使用する必要があります。
この記事では、C#での配列への要素追加の方法を、基本から応用まで詳しく説明します。
1. 配列への要素追加の基本
1.1 配列の性質と限界
C#の配列は、宣言時にサイズが決定されます。そのため、通常の配列に直接新しい要素を「追加」することはできません。しかし、いくつかの方法でこの制限を回避できます。
1.2 Array.Resizeを使用した配列のサイズ変更
Array.Resizeメソッドを使用すると、配列のサイズを動的に変更することができます。これにより、配列の末尾に新しい要素を追加することが可能になります。
int[] numbers = { 1, 2, 3 };
Array.Resize(ref numbers, 4);
numbers[3] = 4;
このコードは、元の配列numbersのサイズを1増やし、新しい要素を追加しています。
2. List<T>を使用した動的な追加
2.1 List<T>の利点
C#のList<T>クラスは、内部的に配列を使用しながらも、動的に要素を追加または削除できる便利なコレクションです。List<T>は、配列のように要素にインデックスでアクセスできます。
2.2 Addメソッドの使用
List<T>のAddメソッドを使用すると、コレクションの末尾に新しい要素を追加できます。
List<int> numbers = new List<int> { 1, 2, 3 };
numbers.Add(4);
この方法では、numbersリストの末尾に新しい要素4が追加されます。
3. 配列への要素の追加
3.1 末尾への追加
配列の末尾に要素を追加するには、Array.Resizeを使用して配列のサイズを増やす必要があります。
int[] numbers = { 1, 2, 3 };
Array.Resize(ref numbers, numbers.Length + 1);
numbers[numbers.Length - 1] = 4;
3.2 先頭への追加
配列の先頭に要素を追加するには、新しい配列を作成し、要素をシフトする必要があります。
int[] numbers = { 1, 2, 3 };
int[] newNumbers = new int[numbers.Length + 1];
newNumbers[0] = 0;
Array.Copy(numbers, 0, newNumbers, 1, numbers.Length);
numbers = newNumbers;
この方法では、新しい要素0が配列numbersの先頭に追加されます。
4. 配列への要素追加の応用
4.1 動的配列としてのList<T>
List<T>は配列に似た動作をしながらも、より柔軟な要素追加や削除をサポートします。複数の要素を追加する場合、AddRangeメソッドを使用できます。
List<int> numbers = new List<int> { 1, 2, 3 };
numbers.AddRange(new int[] { 4, 5, 6 });
4.2 カスタムコレクションの作成
特定の要件に合わせた配列のようなコレクションを作成することも可能です。例えば、固定サイズの循環バッファなどが考えられます。
5. パフォーマンスと最適化
5.1 配列とList<T>のパフォーマンス
List<T>は内部で配列を使用しているため、一定のオーバーヘッドがあります。要素数が固定されている場合は、標準の配列の方がパフォーマンスが良い場合があります。
5.2 メモリ効率の考慮
大量の要素を扱う場合、メモリ効率も重要な考慮事項です。List<T>は必要に応じて内部配列のサイズを調整するため、配列よりもメモリ使用効率が良い場合があります。
まとめ
C#で配列に要素を追加する方法は多岐にわたります。
固定サイズの配列、動的なList<T>、カスタムコレクションなど、用途に応じて最適な方法を選択することが重要です。
この記事では、これらの方法を理解し、C#での配列操作を学ぶことにお役立てできれば幸いです。

