こんにちは!
フリーランス(エンジニア/ライター)のイシキです。
この記事では、配列の宣言・初期化と値を追加する方法について
- 配列とは
- 配列を宣言する方法
- 配列を初期化する方法
- 配列の要素へのアクセス
- 配列に要素を追加する方法
- 多次元配列を宣言する方法
- 多次元配列を初期化する方法
- 多次元配列の要素へのアクセス
など基本的な内容から応用的な使い方についても解説していきます。
配列は、同じ型のデータを一つのかたまりとして扱います。同様のデータを一元管理したり、繰り返し処理を適用することができとても便利です。
それでは、例を交えながら詳しく解説していきます。
配列とは
配列は、同じ型の複数のデータを一つのかたまりとして扱うためのものです。
同様のデータを一元管理したり、繰り返し処理を適用することができとても便利です。インデックス番号を使用するため、for文などの繰り返し処理との相性が抜群です。
配列を使わずに変数でバラバラに扱う場合に比べて、コード量を削減できます。
[配列を使用する場合]
using System; namespace sample { class Program { static void Main() { int[] numbers = new int[3] { 4, 5, 6 }; for(int i = 0; i < numbers.Length; i++) { Console.WriteLine("{0}番目の要素の値は{1}です。", i + 1, numbers[i]); } } } }
[配列を使用しない場合]
using System; namespace sample { class Program { static void Main() { int number0 = 4; int number1 = 5; int number2 = 6; Console.WriteLine("{0}番目の要素の値は{1}です。", 1, number0); Console.WriteLine("{0}番目の要素の値は{1}です。", 2, number1); Console.WriteLine("{0}番目の要素の値は{1}です。", 3, number2); } } }
配列を使わない場合は、「Console.WriteLine」が3回も出てきます。
これは、要素数が増えると同じだけ必要になります。配列を使った場合、for文で処理を繰り返すことができます。
そのため、「Console.WriteLine」は1回しか出てきません。これは、要素数が増えても変わりません。
このようなコード量の削減は、配列を使う分かりやすいメリットです。
配列を宣言する方法
配列を宣言するためには、次のように記述します。
データ型[] 配列名;
次のサンプルコードは整数型配列を宣言する例です。
using System; namespace sample { class Program { static void Main() { int[] numbers; } } }
以降では、配列に値を設定することで実際に使用していきます。
配列を初期化する方法
C#で配列を初期化する方法は、次のように何通りかの方法があります。
基本的な初期化の方法
配列の基本的な初期化の方法は、次の通りです。
データ型[] 配列名 = new データ型[要素数]; 配列名[インデックス番号] = 値 ...
次のサンプルコードでは、要素数を3とするint型の配列を初期化しています。
using System; namespace sample { class Program { static void Main() { int[] numbers = new int[3]; numbers[0] = 4; numbers[1] = 5; for(int i = 0; i < numbers.Length; i++) { Console.WriteLine("{0}番目の要素の値は{1}です。", i + 1, numbers[i]); } } } }
[実行結果]
1番目の要素の値は4です。 2番目の要素の値は5です。 3番目の要素の値は0です。
確認のために、「Console.WriteLine」で配列の要素をコンソールに出力しています。
for文を使用しているのは、繰り返しコンソールに出力するためです。繰り返しの条件として使用しているLengthプロパティは要素数なので、このサンプルコードは全ての要素を出力します。
実行結果から、配列の要素が指定した値で初期化されていることを確認できます。初期化していない要素はデフォルト値になります。
今回は、int型なのでデフォルト値である0となっています。
一括で初期化する方法
初期値を指定して配列を一括で初期化する方法は次の通りです。
データ型[] 配列名 = new データ型[要素数] { 値 ... };
値は要素ごとにカンマで区切り、中カッコで括って記述します。
次のサンプルコードは、値に「4, 5, 6」を指定しています。
using System; namespace sample { class Program { static void Main() { int[] numbers = new int[3] { 4, 5, 6 }; for(int i = 0; i < numbers.Length; i++) { Console.WriteLine("{0}番目の要素の値は{1}です。", i + 1, numbers[i]); } } } }
[実行結果]
1番目の要素の値は4です。 2番目の要素の値は5です。 3番目の要素の値は6です。
実行結果から、配列の各要素が指定した値で初期化されていることを確認できます。
配列の要素へのアクセス
配列の要素へのアクセスは、次のようにします。
配列名[要素のインデックス番号]
using System; namespace sample { class Program { static void Main() { int[] numbers = new int[3] { 4, 5, 6 }; Console.WriteLine("1番目の要素の値は{0}です。", numbers[0]); Console.WriteLine("2番目の要素の値は{0}です。", numbers[1]); Console.WriteLine("3番目の要素の値は{0}です。", numbers[2]); } } }
[実行結果]
1番目の要素の値は4です。 2番目の要素の値は5です。 3番目の要素の値は6です。
要素のインデックス番号が0から始まることに注意してください。
実行結果から、正しく要素にアクセスできていることが確認できます。
配列に要素を追加する方法
配列に要素を追加する方法は、次の通りです。
using System; namespace sample { class Program { static void Main() { int[] numbers = new int[3] { 4, 5, 6 }; Array.Resize(ref numbers, numbers.Length + 1); numbers[numbers.Length - 1] = 7; for (int i = 0; i < numbers.Length; i++) { Console.WriteLine("{0}番目の要素の値は{1}です。", i + 1, numbers[i]); } } } }
[実行結果]
1番目の要素の値は4です。 2番目の要素の値は5です。 3番目の要素の値は6です。 4番目の要素の値は7です。
まず、配列の要素数を増やすため「Array.Resize(ref numbers, numbers.Length + 1);」とします。
Resizeメソッドは、第1引数にサイズを変更する配列を指定し、第2引数に変更後の要素数を指定して使用します。
その後、最後の要素に値を設定するため「numbers[numbers.Length – 1] = 7;」としています。
実行結果から、値が追加されていることを確認できます。
多次元配列を宣言する方法
多次元配列を宣言する方法は次の通りです。
[2次元配列]
データ型[,] 配列名;
[3次元配列]
データ型[,,] 配列名;
次元数をカンマで区切って記述するため、カンマを追加することで3次元以上の配列も同様に宣言することができます。
多次元配列を初期化する方法
C#で配列を初期化する方法は、次のように何通りかの方法があります。
基本的な初期化の方法
多次元配列の基本的な初期化の方法は、次の通りです。
[2次元配列]
データ型[,] 配列名 = new データ型[1次元の要素数, 2次元の要素数]; 配列名[1次元要素のインデックス番号, 2次元要素のインデックス番号] = 値 ...
次のサンプルコードでは、1次元の要素数が2, 2次元の要素数が3の2次元配列を宣言しています。
using System; namespace sample { class Program { static void Main() { int[,] numberTable = new int[2, 3]; numberTable[0, 0] = 4; numberTable[0, 1] = 5; numberTable[0, 2] = 6; numberTable[1, 0] = 7; numberTable[1, 1] = 8; for(int i = 0; i < numberTable.GetLength(0); i++) { for(int j = 0; j < numberTable.GetLength(1); j++) { System.Console.WriteLine("[{0}, {1}]番目の要素の値は{2}です。", i + 1, j + 1, numberTable[i, j]); } } } } }
[実行結果]
[1, 1]番目の要素の値は4です。 [1, 2]番目の要素の値は5です。 [1, 3]番目の要素の値は6です。 [2, 1]番目の要素の値は7です。 [2, 2]番目の要素の値は8です。 [2, 3]番目の要素の値は0です。
確認のために、「Console.WriteLine」で配列の要素をコンソールに出力しています。
for文を使用しているのは、繰り返しコンソールに出力するためです。
繰り返しの条件として使用しているGetLengthメソッドは各次元の要素数を返すので、このサンプルコードは全ての要素を出力します。
初期化していない要素はデフォルト値になります。
今回は、int型なのでデフォルト値である0となっています。
一括で初期化する方法
初期値を指定して多次元配列を一括で初期化する方法は次の通りです。
[2次元配列]
データ型[,] 配列名 = new データ型[1次元の要素数, 2次元の要素数] { { 値 ... }, { 値 ... } ... };
値は、各次元の要素ごとにカンマで区切り、中カッコで括って記述します。
次のサンプルコードは、値に「 { 4, 5, 6 }, { 7, 8, 9 }」を指定しています。
using System; namespace sample { class Program { static void Main() { int[,] numberTable = new int[2, 3] { { 4, 5, 6 }, { 7, 8, 9 }, }; for (int i = 0; i < numberTable.GetLength(0); i++) { for (int j = 0; j < numberTable.GetLength(1); j++) { Console.WriteLine("[{0}, {1}]番目の要素の値は{2}です。", i + 1, j + 1, numberTable[i, j]); } } } } }
[実行結果]
[1, 1]番目の要素の値は4です。 [1, 2]番目の要素の値は5です。 [1, 3]番目の要素の値は6です。 [2, 1]番目の要素の値は7です。 [2, 2]番目の要素の値は8です。 [2, 3]番目の要素の値は9です。
実行結果から、配列の各要素が指定した値で初期化されていることを確認できます。
多次元配列の要素へのアクセス
多次元配列の要素へのアクセスは、次のようにします。
[2次元配列]
配列名[1次元要素のインデックス番号, 2次元要素のインデックス番号]
using System; namespace sample { class Program { static void Main() { int[,] numberTable = new int[2, 3] { { 4, 5, 6 }, { 7, 8, 9 }, }; Console.WriteLine("[1, 1]番目の要素の値は{0}です。", numberTable[0, 0]); Console.WriteLine("[1, 2]番目の要素の値は{0}です。", numberTable[0, 1]); Console.WriteLine("[1, 3]番目の要素の値は{0}です。", numberTable[0, 2]); Console.WriteLine("[2, 1]番目の要素の値は{0}です。", numberTable[1, 0]); Console.WriteLine("[2, 2]番目の要素の値は{0}です。", numberTable[1, 1]); Console.WriteLine("[2, 3]番目の要素の値は{0}です。", numberTable[1, 2]); } } }
[実行結果]
[1, 1]番目の要素の値は4です。 [1, 2]番目の要素の値は5です。 [1, 3]番目の要素の値は6です。 [2, 1]番目の要素の値は7です。 [2, 2]番目の要素の値は8です。 [2, 3]番目の要素の値は9です。
要素のインデックス番号が0から始まることに注意してください。
実行結果から、正しく要素にアクセスできていることが確認できます。
まとめ
いかがでしたか?
今回は、配列の宣言・初期化と値を追加する方法について解説しました。
配列は、同じ型のデータを一つのかたまりとして、インデックス番号によって扱います。そのため、繰り返し処理とは相性がいいので合わせて覚えてると便利です。
もし、配列を使用する機会があれば、この記事を思い出してみてください!