配列とforeach

配列と繰り返し処理をおこなうforeachについてまとめる。

配列

様々なデータ型について、その配列を考えることができる。まずは基本的な int型の配列からその使用法を確認する。

int型データを要素に持つ配列

int[] a = new int[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
for (int i = 0; i < 3; i++)
{
    Console.WriteLine($"{a[i]}");
}

実行結果.

1
2
3

解説.

最初の行

int[] a = new int[3];

で変数aを、要素数3のint型データを持つ配列として定義している。

次の行で、具体的なデータを入れている。 注意すべき点は、要素をあらわす番号が「0」から始まるということ。 したがって、要素数が3個のデータを確保することによって利用できるようになるのは、 a[0],a[1],a[2]までの「3」個の要素である。 要素a[3]は「4」個めのデータになるので利用できない。 もし、a[3]を利用したければ、最初の行で、

int[] a = new int[4];

と確保する要素数を増やす必要がある。

配列を初期化する簡単な方法も用意されている。

配列を簡単に初期化する方法

int[] a = { 1, 2, 3 };
for (int i = 0; i < 3; i++)
{
    Console.WriteLine($"{a[i]}");
}

実行結果.

1
2
3

解説.

最初の行

int[] a = { 1, 2, 3 };

で変数aをint型の配列を扱う変数として定義し、初期値を設定している。

a[0]=1;a[1]=2;a[2]=3;

と同じことになる。確保される要素数も自動的に「3」になるので、「4」番目のデータa[3]はやはり利用できない。

文字列の配列

string[] a = new string[3];
a[0] = "x1";
a[1] = "x2";
a[2] = "x3";
for (int i = 0; i < 3; i++)
{
    Console.WriteLine($"{a[i]}");
}

実行結果.

x1
x2
x3

解説.

文字列の配列も利用法はほとんど同じ。

文字列の配列(初期化簡易版)

string[] a = { "x1", "x2", "x3" };
for (int i = 0; i < 3; i++)
{
    Console.WriteLine($"{a[i]}");
}

実行結果.

x1
x2
x3

解説.

文字列配列に関しても、同じように簡易的に初期化できる。

汎用性のある安全なコード

これまでのプログラムには少し問題があった。それは、 要素数が変更になった時に、for文の()の中の要素数を指定している箇所も変更する必要が生じるという点である。

この問題を解決するには、配列の長さを「Length」によって取得する。

要素数の変更に対応したプログラム.

int[] a = { 1, 2, 3 };
for (int i = 0; i < a.Length; i++)
{
    Console.WriteLine($"{a[i]}");
}

実行結果.

1
2
3

Lengthによって要素数を取得する以外に、foreachを利用する方法もある。

foreach

foreachもforと同様に繰り返し処理に用いられるが、特に配列に対しては foreachが良く用いられる。

foreachを用いる方法.

int[] a = { 1, 2, 3 };
foreach (var item in a)
{
    Console.WriteLine(item);
}

実行結果.

1
2
3

解説.

item が配列 a の各要素を最初から最後まで順番に取ることになる。 このようにforeachを利用するとコードが簡潔になるので重宝される。

注. 配列だからといってforeachを利用したほうが良いとは限らない。 インデックスが必要になる場合は、foreachだとそれ用の変数を別で用意することになり、 結果、更新すべき変数の更新忘れが多々起きる。回避手段もあるにはあるが、あまり簡潔な方法ではないので このような場合は、無理してforeachを利用する必要はない。