演習 - foreach ステートメント

完了

メーカーで働いていて、出荷準備が整っている完成品の現在の数を確認するために、倉庫の在庫を取得する必要があるものとします。 完成品の合計数に加えて、完成した製品が格納されている倉庫内の各ビンの数と途中集計を出力する必要もあります。 この途中集計の出力により監査証跡が作成され、作業の再確認と減少の識別が可能になります。

foreach を使用した配列のループ

foreach ステートメントで配列内の各要素をループし、その宣言の下にあるコード ブロックを実行して、現在のループが表す配列の値に対する一時変数の値を置き換えます。

簡単な例を次に示します。

string[] names = { "Bob", "Conrad", "Grant" };
foreach (string name in names)
{
    Console.WriteLine(name);
}

foreach キーワードの下にある Console.WriteLine(name); を含むコード ブロックは、names 配列の各要素に対して 1 回ずつ実行されます。 .NET ランタイムによって配列の各要素がループされると、names 配列の現在の要素に格納されている値が、コード ブロック内で簡単にアクセスできるように、一時変数 name に代入されます。

コードを実行すると、次の結果が表示されます。

Bob
Conrad
Grant

ここでは、foreach ステートメントを使用して、倉庫の各ビンにあるすべての項目の合計を作成します。

ステップ 1 - int の配列を作成して初期化する

前の演習で作成したコードを削除またはコメントアウトし、次のコードを追加して、各 bin の完成品の数を格納する int の配列を作成します。

int[] inventory = { 200, 450, 700, 175, 250 };

ステップ 2 - 配列を反復処理するための foreach ステートメントを追加する

次に、inventory 配列の各要素を反復処理し、現在の要素の値を変数 items に一時的に代入する、foreach ステートメントを追加します。 コードは次のリストのようになるはずです。

int[] inventory = { 200, 450, 700, 175, 250 };

foreach (int items in inventory)
{

}

ステップ 3 - 変数を追加して配列の各要素の値を合計する

倉庫内のすべての完成品の合計を表す新しい変数を定義します。 必ず、foreach ステートメントの外側に追加してください。

int sum = 0;

foreach ステートメントの内側には、items に格納されている現在の値を変数 sum に追加する次のコード行を追加します。

sum += items;

あなたのコードが次のコードと一致することを確認してください。

int[] inventory = { 200, 450, 700, 175, 250 };
int sum = 0;
foreach (int items in inventory)
{
    sum += items;
}

ステップ 4 - sum の最終的な値を表示する

foreach ステートメントのコード ブロックのに、在庫内の項目の最終的な合計を出力する次のステートメントを追加します。

Console.WriteLine($"We have {sum} items in inventory.");

あなたのコードが次のコードと一致することを確認してください。

int[] inventory = { 200, 450, 700, 175, 250 };
int sum = 0;
foreach (int items in inventory)
{
    sum += items;
}

Console.WriteLine($"We have {sum} items in inventory.");

コードを実行すると、次の出力が表示されます。

We have 1775 items in inventory.

ステップ 5 - 現在のビン番号を保持する変数を作成し、途中集計を表示する

最終的な要件を満たすためには、ビンとそのビン内の完成品の数、およびそれまでに処理したビンの全項目の途中集計を表示できるように、foreach ステートメントの現在の反復を保持する変数を作成する必要があります。

foreach ステートメントの上で、在庫が処理されている現在のビンの番号を格納する int 型の新しい変数を宣言して初期化します。

int bin = 0;

foreach コード ブロックの内側で、コード ブロックが実行されるたびにビンをインクリメントします。

bin++;

++ 演算子により、変数の値が 1 だけインクリメントされます。 それは、bin = bin + 1 という記述の短縮形です。

最後に、foreach の内側で、ビン、その完成品の数、および完成した製品の途中集計を、適切に書式設定されたメッセージで表示します。

Console.WriteLine($"Bin {bin} = {items} items (Running total: {sum})");

あなたのコードが次のコードと一致することを確認してください。

int[] inventory = { 200, 450, 700, 175, 250 };
int sum = 0;
int bin = 0;
foreach (int items in inventory)
{
    sum += items;
    bin++;
    Console.WriteLine($"Bin {bin} = {items} items (Running total: {sum})");
}
Console.WriteLine($"We have {sum} items in inventory.");

コードを実行すると、次の出力が表示されます。

Bin 1 = 200 items (Running total: 200)
Bin 2 = 450 items (Running total: 650)
Bin 3 = 700 items (Running total: 1350)
Bin 4 = 175 items (Running total: 1525)
Bin 5 = 250 items (Running total: 1775)
We have 1775 items in inventory.

まとめ

ここでは、foreach ステートメントと、このユニットで学習したその他の事柄について、いくつかの注意事項を示します。

  • foreach ステートメントを使用して配列内の各要素を反復処理し、関連付けられているコード ブロックを配列の各要素に対して 1 回実行します。
  • foreach ステートメントでは、配列内の現在の要素の値を一時変数に設定します。この変数は、コード ブロックの本体で使用できます。
  • ++ インクリメント演算子を使用して、変数の現在の値に 1 を加算します。