Day 13 のゴールと全体イメージ
Day 13 では、foreach 文を使って「配列」や「コレクション」の要素を順番に処理する方法を学びます。 これまでの for・while は「カウンターで回す」スタイルでしたが、foreach は
「中身をひとつずつ取り出して処理する」
ことに特化した構文です。
学ぶことは次のとおりです。
- foreach の基本構文
- 配列との組み合わせ
- コレクション(List など)との組み合わせ
これらをステップバイステップでかみ砕きながら、初心者の方でも自然に使えるようになることを目指します。
foreach 文とは何か
「全部なめる」ための構文
foreach 文は、
「配列やコレクションの中身を、先頭から順番にひとつずつ取り出して処理する」
ための構文です。基本形は次のようになります。
foreach (要素の型 変数名 in 配列やコレクション)
{
// 取り出した要素に対して行いたい処理
}
C#例えば、文字列の配列 names の中身を順番に表示したい場合は、次のように書きます。
string[] names = { "Alice", "Bob", "Charlie" };
foreach (string name in names)
{
Console.WriteLine(name);
}
C#重要ポイント:
inの右側に「回したい対象」(配列・コレクション)を書きます。inの左側には「1 要素分の型」と「その要素を受け取る変数名」を書きます。- foreach は「中身を全部なめる」処理に向いています。
配列と foreach の基本
配列をおさらいする
配列は、同じ型の値をまとめて扱うための入れ物です。
string[] fruits = { "Apple", "Banana", "Orange" };
C#この配列 fruits には、3 つの文字列が入っています。 これを foreach で順番に取り出して表示してみます。
例1:配列の要素をすべて表示する
using System;
class Program
{
static void Main(string[] args)
{
// フルーツの配列を用意します
string[] fruits = { "Apple", "Banana", "Orange" };
// foreach で配列の中身を順番に取り出して表示します
foreach (string fruit in fruits)
{
// fruit には、配列の要素が 1 つずつ入ってきます
Console.WriteLine($"フルーツ:{fruit}");
}
Console.ReadLine();
}
}
C#重要ポイント:
string fruit in fruitsのfruitは、「今取り出した 1 要素」を表します。- foreach の中では、インデックス(0, 1, 2 など)を意識する必要がありません。
- 「全部表示したい」「全部チェックしたい」といった場面で、とても書きやすくなります。
for と foreach の違い
インデックスを使うか、中身を直接扱うか
同じ配列を for で回すと、次のようになります。
string[] fruits = { "Apple", "Banana", "Orange" };
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
C#ここでは、
iというカウンターを使ってインデックスを指定し、fruits[i]で要素を取り出しています。
一方、foreach ではインデックスを使わず、要素そのものを直接扱います。
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
C#違いの整理:
- for
- インデックス(
i)を使って要素を取り出す。 - 「何番目か」を意識したいときに向いている。
- インデックス(
- foreach
- 要素そのものを直接扱う。
- 「全部なめたい」「順番に処理したい」場面に向いている。
初心者の方は、「インデックスが必要なときは for」「中身を全部処理したいだけなら foreach」と覚えておくと分かりやすいです。
例2:数値配列と foreach
合計や平均を計算する
数値の配列を foreach で回して、合計を計算する例を見てみます。
using System;
class Program
{
static void Main(string[] args)
{
// テストの点数の配列
int[] scores = { 80, 90, 75, 100 };
int sum = 0; // 合計値を入れる変数
// foreach で scores の中身を順番に取り出して、合計を計算します
foreach (int score in scores)
{
sum += score; // sum = sum + score と同じ意味です
}
double average = (double)sum / scores.Length; // 平均値を計算します
Console.WriteLine($"合計点:{sum}");
Console.WriteLine($"平均点:{average}");
Console.ReadLine();
}
}
C#重要ポイント:
- foreach の中で、取り出した要素を使って計算することができます。
scores.Lengthは「配列の要素数」です。- 合計や平均など、「全部を対象にした計算」と foreach は相性が良いです。
コレクションと foreach
List<T> と foreach の組み合わせ
C# では、配列だけでなく List\<T\> というコレクションもよく使われます。 List は「あとから追加・削除ができる配列のようなもの」です。
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
// 文字列のリストを作成します
List<string> animals = new List<string>();
// 要素を追加します
animals.Add("Dog");
animals.Add("Cat");
animals.Add("Bird");
// foreach でリストの中身を順番に表示します
foreach (string animal in animals)
{
Console.WriteLine($"動物:{animal}");
}
Console.ReadLine();
}
}
C#重要ポイント:
- List でも、配列と同じように foreach が使えます。
List<string>のように、型を指定してリストを作ります。Addメソッドで要素を追加し、foreach で中身をなめる、という流れが基本です。
例3:ユーザー入力を List にためて foreach で表示
「入力履歴」をまとめて表示する
foreach とコレクションの組み合わせを、少し実用的な形で見てみます。
「ユーザーに何度か文字列を入力してもらい、最後に全部まとめて表示する」
というプログラムです。
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List<string> inputs = new List<string>(); // 入力された文字列をためるリスト
Console.WriteLine("3 回文字を入力してください:");
for (int i = 1; i <= 3; i++)
{
Console.WriteLine($"{i} 回目の入力:");
string text = Console.ReadLine();
inputs.Add(text); // 入力された文字列をリストに追加します
}
Console.WriteLine();
Console.WriteLine("=== 入力された文字列一覧 ===");
// foreach でリストの中身を順番に表示します
foreach (string item in inputs)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}
C#ポイント:
- 「集める」ときは List、「まとめて処理する」ときは foreach、という組み合わせが自然です。
- for で「回数を決めて入力」、foreach で「全部表示」というように、 それぞれの構文の得意分野を活かしています。
foreach の注意点:要素の変更について
foreach の中で要素を書き換えるのは基本的に不可
配列や List の要素を foreach の中で直接書き換えることは、基本的にはできません(特に List ではコンパイルエラーになります)。
例えば、次のようなコードは問題になります。
List<int> numbers = new List<int> { 1, 2, 3 };
foreach (int n in numbers)
{
// n = n * 2; // これはコンパイルエラーになります(n は読み取り専用)
}
C#理由:
- foreach の変数(ここでは
n)は「読み取り専用」として扱われるため、 直接代入して書き換えることはできません。
対策:
- 要素を書き換えたい場合は、for 文でインデックスを使ってアクセスする。
- または、新しいコレクションを作って、加工した値をそちらに入れる。
初心者の方は、まずは「foreach は読む専用」「書き換えたいときは for」と覚えておくと安全です。
練習テンプレート:foreach で遊ぶ
配列版テンプレート
using System;
class Program
{
static void Main(string[] args)
{
// 好きな言葉の配列
string[] words = { "Hello", "World", "C#", "Programming" };
// foreach で全部表示します
foreach (string w in words)
{
Console.WriteLine($"単語:{w}");
}
Console.ReadLine();
}
}
C#List 版テンプレート
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
// 整数のリスト
List<int> numbers = new List<int> { 10, 20, 30, 40 };
int sum = 0;
foreach (int n in numbers)
{
Console.WriteLine($"要素:{n}");
sum += n;
}
Console.WriteLine($"合計:{sum}");
Console.ReadLine();
}
}
C#これらのテンプレートを使って、
- 要素を増やしたり減らしたりしてみる
- 文字列を
ToUpper()やLengthで加工して表示してみる - 条件を付けて「特定の要素だけ表示する」(例:3 文字以上の単語だけ)
といった練習をすると、foreach と配列・コレクションの感覚が自然に身についていきます。
Day 13 のまとめ
Day 13 では、
- foreach 文の基本構文
- 配列との組み合わせ(全要素の表示・合計計算など)
- コレクション(List)との組み合わせ(入力をためて表示するなど)
を通して、
「配列やコレクションの中身を、先頭から順番にひとつずつ処理する」
というスタイルを体験しました。
for・while が「回数や条件で回す」構文なのに対して、 foreach は「中身を全部なめる」構文です。
ぜひ、
- 配列や List を自分で作って、いろいろなデータを入れてみる
- foreach で「全部表示」「全部チェック」「全部足す」といった処理を書いてみる
- 「インデックスが必要なときは for」「中身を全部処理したいだけなら foreach」という使い分けを意識する
といった練習を通して、「コレクションを自然に扱える感覚」を育てていってください。
