今回は、C#で配列を初期化する方法についてご紹介します。
配列の概要
C#における配列は、同じ型の要素をまとめて管理できるデータ構造です。
配列を使うと複数の値を一括で操作できるため、コードの可読性とメンテナンス性を向上させることができます。
ただし一度生成した配列のサイズは変更できないため、動的に要素数を増減させたい場合にはList<T>のようなコレクションを利用することが一般的です。
一次元配列の初期化方法
new キーワードとサイズ指定のみ
まずはサイズだけを指定して配列を作成し、各要素を既定値で初期化する方法です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; public class Program { public static void Main() { // 要素数5のint型配列 // 各要素はintの既定値(0)で初期化される int[] array1 = new int[5]; // 確認のため出力 foreach(int num in array1) { Console.WriteLine(num); } } } |
0
0
0
0
0
上記のように、要素数を指定してnewキーワードで生成すると、int型であれば0、string型であればnullなど型の既定値が格納されます。
初期化子を用いた宣言
次に、宣言と同時に具体的な値を割り当てる初期化子を利用した方法です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System; public class Program { public static void Main() { // 明示的に new int[] を書く場合 int[] array2 = new int[] { 1, 2, 3, 4, 5 }; // 型推論を利用する場合 var array3 = new[] { 10, 20, 30, 40, 50 }; // 簡略記法(new int[] の部分を省略可能) int[] array4 = { 6, 7, 8, 9, 10 }; // 出力 Console.WriteLine("array2:"); foreach(int num in array2) Console.WriteLine(num); Console.WriteLine("array3:"); foreach(int num in array3) Console.WriteLine(num); Console.WriteLine("array4:"); foreach(int num in array4) Console.WriteLine(num); } } |
array2:
1
2
3
4
5
array3:
10
20
30
40
50
array4:
6
7
8
9
10
初期化子を使うことで、コードの可読性や可搬性が向上します。
多次元配列の初期化方法
二次元配列
要素が連続したメモリ領域に配置される多次元配列は、行列のようなデータを扱う場面で便利です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using System; public class Program { public static void Main() { // 2行3列の二次元配列 int[,] matrix = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } }; // 初期化子のみでサイズを自動推論 int[,] matrix2 = { { 7, 8, 9 }, { 10, 11, 12 } }; // 出力 Console.WriteLine("matrix:"); for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { Console.Write(matrix[i, j] + " "); } Console.WriteLine(); } Console.WriteLine("matrix2:"); for (int i = 0; i < matrix2.GetLength(0); i++) { for (int j = 0; j < matrix2.GetLength(1); j++) { Console.Write(matrix2[i, j] + " "); } Console.WriteLine(); } } } |
matrix:
1 2 3
4 5 6
matrix2:
7 8 9
10 11 12
3次元以上の多次元配列
必要に応じて、3次元以上の配列も同様に宣言できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System; public class Program { public static void Main() { // 2×2×2の三次元配列 int[,,] cube = new int[2, 2, 2] { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } } }; // 出力 for (int x = 0; x < cube.GetLength(0); x++) { for (int y = 0; y < cube.GetLength(1); y++) { for (int z = 0; z < cube.GetLength(2); z++) { Console.Write(cube[x, y, z] + " "); } Console.WriteLine(); } Console.WriteLine("---"); } } } |
1 2
3 4
—
5 6
7 8
—
ジャグ配列(配列の配列)の初期化方法
ジャグ配列では、行ごとに異なる要素数の配列を持つことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
using System; public class Program { public static void Main() { // 要素数3の配列を用意 int[][] jagged = new int[3][]; // 各要素に異なるサイズの配列を代入 jagged[0] = new int[] { 1, 2 }; jagged[1] = new int[] { 3, 4, 5 }; jagged[2] = new int[] { 6, 7, 8, 9 }; // 出力 for (int i = 0; i < jagged.Length; i++) { for (int j = 0; j < jagged[i].Length; j++) { Console.Write(jagged[i][j] + " "); } Console.WriteLine(); } } } |
1 2
3 4 5
6 7 8 9
多次元配列とはメモリ構造が異なるため、パフォーマンスや操作性にも差があります。
扱いたいデータや目的に合わせて多次元配列かジャグ配列を使い分けるとよいでしょう。
その他の初期化方法
Array.CreateInstanceを利用する場合
配列の型やサイズを動的に指定したい場面では、Array.CreateInstanceを使う方法があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System; public class Program { public static void Main() { // int型要素を持つ長さ4の配列を動的に作成 Array arrayInstance = Array.CreateInstance(typeof(int), 4); // 確認のため出力 foreach (var item in arrayInstance) { Console.WriteLine(item); } } } |
0
0
0
0
要素の型や数が実行時までわからないケースで有用ですが、通常の配列より扱いが複雑になる場合があります。
初期化後の値の設定
配列を宣言した後、あとから各要素の値を設定することも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; public class Program { public static void Main() { // 3要素のint配列 int[] numbers = new int[3]; // 値の設定 numbers[0] = 100; numbers[1] = 200; numbers[2] = 300; // 出力 foreach (int n in numbers) { Console.WriteLine(n); } } } |
100
200
300
配列の注意点
固定長である点に注意しましょう。
C#の配列はサイズを変更できません。
要素数を柔軟に変化させたい場合はList<T>などのコレクションを使うと便利です。
また、インデックスは0から始まるので範囲外アクセスに注意が必要です。
さらに、多次元配列とジャグ配列ではメモリ配置が異なるため、使い分けを意識しましょう。
まとめ
C#で配列を初期化する方法として、newキーワードによる宣言や初期化子の使用、多次元配列やジャグ配列の活用などがあります。
用途に合わせて柔軟に書き方を選択することで、コードの可読性やパフォーマンスを向上させることができます。
強みや特徴を理解し、最適な配列初期化方法を選びましょう。