PR

[C#] foreachで配列やコレクションの要素を1つずつ取り出す

foreachを使うと配列やコレクションといったデータの集まりからすべての要素を一つずつ取り出しながら処理を行うことができます。

スポンサーリンク

foreachの使い方

foreachの構文はこんな感じです。

foreach ( 要素の型 要素を受け取る変数名 in 配列やコレクション) { ...; }

要素:配列やコレクションの中にある1つ1つのデータのこと。
要素の型:配列やコレクションの要素の型を指定します。たいていはvarでいいと思います。
要素を受け取る変数名:各要素が順番にこの変数に入ります、{ } ブロック内のみで有効です。繰り返し変数というらしい。
配列やコレクション:要素を取り出したい配列・コレクション(ListやDictionaryなど)を指定します。

using System;
using System.Collections.Generic;  //Listを使うのに必要
class Program
{
    public static void Main()
    {
        // 配列をforeachで順番に取り出す
        int[] ary = new int[] { 10, 20, 30 };
        // foreachを使って各要素を1つずつ取り出す
        foreach (int i in ary) {
            Console.WriteLine(i);
        }

        // string型のリストをforeachで順番に取り出す
        List<string> list = new List<string> { "a", "b", "c" };
        // foreachを使って各要素を1つずつ取り出す
        foreach (string str in list) {
            Console.WriteLine(str);
        }
    }
}

また、foreachの { } ブロック内の処理が1行だけの場合、{ } を省略することができます。

using System;
class Program
{
    public static void Main()
    {
        // 配列をforeachで順番に取り出す
        int[] ary = new int[] { 10, 20, 30 };
        // foreachを使って各要素を1つずつ取り出す
        foreach (int i in ary) Console.WriteLine(i);
    }
}

foreach内での値の設定について

foreach内で使われる繰り返し変数に値を代入しようとするとエラーになります。

配列やコレクションの全て要素を初期化したいというときには、forを使いましょう。

class Program {
    public static void Main() {
        // int型の要素を5個もった配列を定義
        int[] ary = new int[5];

        // 各要素に初期値として0を代入
        for (int i = 0; i < ary.Length; i++) {
            ary[i] = 0;
        }
    }
}
スポンサーリンク

途中でforeachを抜け出す(break)

break キーワードを使うとforeachの途中で処理を中断してforeachブロック{ } を抜けることができます。
大体の場合、ifで条件を満たした場合にbreakするという使い方だと思います。

using System;
class Program
{
    public static void Main()
    {
        // 配列をforeachで順番に取り出す
        int[] ary = new int[] { 10, 20, 30, 40, 50 };
        // foreachを使って各要素を1つずつ取り出す
        foreach (int i in ary) {
            Console.WriteLine(i);
            // iが30だったらforeachを抜ける
            if (i == 30) break;
        }
    }
}

出力結果はこんな感じです。3つ目の要素(30)を処理してforeachを抜けています。

10
20
30
スポンサーリンク

foreachの途中で次の要素にスキップする(continue)

continue キーワードを使うとforeachの途中で次の要素へスキップすることができます。
こちらもifで条件を指定して処理をスキップするという使い方が多いと思います。

using System;
class Program
{
    public static void Main()
    {
        // 配列をforeachで順番に取り出す
        int[] ary = new int[] { 1, 2, 3, 4, 5 };
        // foreachを使って各要素を1つずつ取り出す
        foreach (int i in ary) {

            // 奇数の場合に処理をスキップ
            if (i % 2 == 1) continue;

            Console.WriteLine(i);
        }
    }
}
2
4
スポンサーリンク

forとforeachの違い

for文の場合は、カウンター変数を使いインデックスを使って配列やコレクションにアクセスしたいときに使います。

using System;
class Program
{
    public static void Main()
    {
        int[] ary = new int[] { 10, 20, 30, 40 };
        for (int i = 0; i < ary.Length; i++) {
            // インデックスを使って各要素にアクセス
            Console.WriteLine(ary[i]);
        }
    }
}

foreach文ではインデックスを使わずにすべての要素を順番に取り出すことができます。
なので、Dictionaryなどインデックスではアクセスできないコレクションも取り出すことが出来ます。

using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        int[] ary = new int[] { 10, 20, 30, 40 };
        foreach (int i in ary) {
            // foreachを使って各要素を1つずつ取り出す
            Console.WriteLine(i);
        }

        var dic = new Dictionary<string, int> {
            { "key1", 1 },
            { "key2", 2 },
            { "key3", 3 },
        };
        foreach (var keyValue in dic) { 
            //Dictionaryの要素はKeyValuePair型
            Console.WriteLine($"key={keyValue.Key}, value={keyValue.Value}");
        }
    }
}
スポンサーリンク

foreachが使えるのはIEnumerableなもの

見出し通りですがforeachのinに指定できるのはIEnumerableというインターフェースを実装している必要があります。自分で作ったクラスをforeachで使いたいというときにこのインターフェースを使う必要があるので、そのときに思い出してください。

イテレーター(iterator)という機能を使い、簡単にIEnumerableインターフェースを実装する方法があります。詳細はこちらの記事をみてください。

[C#] イテレーターを使ってforeachで使えるメソッドを作る(yield)
IEnumerable<T>を返すメソッドでyieldを使うとforeachのinのところで使えるようになるよ、という話。foreachを使ってオブジェクトから要素を取り出して処理するには、IEnumerableインターフェース

とりあえず、foreachが使えるのは配列とコレクション(List、Dictionaryなど)と覚えておけば大丈夫です。


C# 記事まとめページに戻る(他のサンプルコードもこちら)

C# プログラミング講座
C#についての記事まとめページです。開発環境VisualStudioのインストール方法や使い方、プログラミングの基礎知識についてや用語説明の記事一覧になっています。講座の記事にはすぐに実行できるようにサンプルコードを載せています。

コメント

  1. […] […]