foreach文の使い方を知りたい。。。
この記事では、C# の foreach 文の使い方をサンプルコードを交えて分かりやすく解説ています。
foreach 文を使うと配列やコレクションといったデータの集まりからすべての要素を一つずつ取り出しながら処理を行うことができます。
この記事は foreach 文を使う方法などを紹介していますので、ぜひ参考にしてみて下さい。
オススメの参考書
C#の使い方が丁寧に解説しており、「基礎からしっかりと学びたい」という初心者の方にオススメの一冊です。サンプルコードも記載してあり、各章の最後に復習問題があるので理解度を確認しながら読み進めることができます。新しい C# のバージョンにも対応している書籍です。
foreach文とは
C# の foreach 文 は、配列やコレクションといったデータの集まりから、すべての要素を一つずつ取り出しながら処理を行いたい際に使用します。
foreach 文による繰り返しでは、配列に含まれる要素の数だけ繰り返しが行われ、1回繰り返しが行われるたびに配列に含まれる要素の値を変数に代入します。
フローチャートで表すと次のようになります。
foreach文の基本構文
foreach 文は次のような構文になっています。
foreach (①データ型 変数 in 配列やコレクション)
{
繰り返し処理
}
foreach 文のポイントは次の通りです。
- 配列やコレクションの要素を順番に取り出して変数に代入します。
- 変数は繰り返し処理内でしか使用できません。
- for 文と違ってカウントする変数は存在しません。
- foreach 文で使われる繰り返し変数に値を代入しようとすると、エラーになります。
- 使用する変数が null の場合、System.NullReferenceException の例外が発生します。
具体的な例を見ていきましょう。
下記のコードは「配列の要素を順番に取り出してコンソールに出力する」というプログラムです。
var fruits = new string[] { "アップル", "バナナ", "ストロベリー" };
foreach (var fruit in fruits) // ①
{
Console.WriteLine(fruit); // ②
}
処理の流れは次のようになります。
- 配列
fruits
から1番目の要素である”アップル”がfruit
代入される。・・・① - コンソールに
fruit
の値(アップル)が出力される。・・・② - 配列
fruits
から1番目の要素である”バナナ”がfruit
代入される。・・・① - コンソールに
fruit
の値(バナナ)が出力される。・・・② - 配列
fruits
から1番目の要素である”ストロベリー”がfruit
代入される。・・・① - コンソールに
fruit
の値(ストロベリー)が出力される。・・・② - foreach 文を抜ける。
実行結果は次のようになります。
アップル
バナナ
ストロベリー
繰り返し処理を制御する
繰り返し処理の途中で foreach 文を終了、または処理をスキップする場合に使えるのが、 break 文や continue 文を使います。
- break 文:繰り返し処理を終了する
- continue 文:繰り返し処理の途中でスキップして、次の繰り返し処理へ進める
具体的な例を見ていきましょう。
下記のコードは「配列の要素を順番に取り出してコンソールに出力する。配列の要素が “C” の場合はコンソールに出力はしない。配列の要素が “E” の場合は foreach 文を抜ける」というプログラムです。
var characters = new string[] { "A", "B", "C", "D", "E", "F", "G" };
foreach (var character in characters)
{
if (character == "C")
{
continue;
}
if (character == "E")
{
break;
}
Console.WriteLine(character);
}
5行目はcharacter
の値が “C” の場合、continue 文によって以降の処理をスキップしています。
10行目はcharacter
の値が “E” の場合、break 文によって繰り返し処理を終了しています。
結果は次のようになります。
A
B
D
foreach文のサンプルコード
foreach 文の構文を使って、プログラムを確認してみましょう。
サンプルコード①
var characters = new string[] { "A", "B", "C", "D" };
foreach (var character in characters)
{
Console.WriteLine(character);
}
このサンプルは「1次元配列の要素を取得してコンソールに出力する」サンプルです。
1次元配列は、1行だけで構成された配列です。
上記のコードを実行すると、次のような結果を得られます。
A
B
C
D
サンプルコード②
var characters = new string[,]
{
{ "A", "B", "C" },
{ "D", "E", "F" },
{ "G", "H", "I" },
};
foreach (var character in characters)
{
Console.WriteLine(character);
}
このサンプルは「多次元配列の要素を取得してコンソールに出力する」サンプルです。
多次元配列は、1次元以上の配列(つまり2次元や3次元といった配列)で構成された配列です。
foreach 文で多次元配列を列挙する場合、行や列ごとといった部分配列が列挙されるのではなく、次元が平坦化された1次元の数列として列挙されます。
そのため、多次元配列から行や列ごとに要素を抽出したい場合は、foreach 文ではなく for 文でインデックスを指定して列挙する必要があります。
上記のコードを実行すると、次のような結果を得られます。
A
B
C
D
E
F
G
H
I
サンプルコード③
var list = new List<string>()
{
"A",
"B",
"C",
"D"
};
foreach (var str in list)
{
Debug.WriteLine(str);
}
このサンプルは「リストの要素を取得してコンソールに出力する」サンプルです。
リストは、同じ型の値をまとめて管理する事ができるコレクションです。
上記のコードを実行すると、次のような結果を得られます。
A
B
C
D
サンプルコード④
var items = new Dictionary<int, string>()
{
{ 100, "A" },
{ 200, "B" },
{ 300, "C" },
{ 400, "D" },
};
// keyとvalueを取得するforeach文
foreach (var item in items)
{
Console.WriteLine($"key:{item.Key} value:{item.Value}");
}
// keyだけを取得するforeach文
foreach (var key in items.Keys)
{
Console.WriteLine($"key:{key}");
}
// valueだけを取得するforeach文
foreach (var value in items.Values)
{
Console.WriteLine($"value:{value}");
}
このサンプルは「連想配列の要素を取得してコンソールに出力する」サンプルです。
連想配列は、「key」と「value」の組み合わせで使用することができる配列です。
foreach 文を使うと「key」と「value」、「key」のみ、「value」のみの3パターンで取得することができます。
上記のコードを実行すると、次のような結果を得られます。
key:100 value:A
key:200 value:B
key:300 value:C
key:400 value:D
key:100
key:200
key:300
key:400
value:A
value:B
value:C
value:D
まとめ
この記事では、C# の foreach 文の使い方とサンプルコードをいつくか紹介しました。
配列やコレクションからすべての要素を一つずつ取り出す。
- break 文や continue 文を使って繰り返し処理の制御が可能である。
配列やリスト、Dictionary などの要素を順番に取り出したい場合は、foreach 文を活用しましょう。
この機会にしっかりとマスターしておくことをオススメします。
以上、最後まで読んで頂きありがとうございました。