2重ループをLINQで行う

2つの配列をforeachを使って2重ループする次のコードを、
LINQを使ったコードに書き換えます。

static void Func1()
{
    string[] array1 = { "A", "B", "C" };
    int[] array2 = { 1, 2, 3 };
    var q = new List<string>();

    foreach (var n in array1)
        foreach (var m in array2)
            q.Add($"{n}{m}");

    foreach (var i in q)
        Console.WriteLine(i);
}

実行結果

A1
A2
A3
B1
B2
B3
C1
C2
C3

クエリ構文

クエリ構文は、fromは2回以上使用できます。
fromを2回使って、2重ループと同じ処理ができます。

static void Func2()
{
    string[] array1 = { "A", "B", "C" };
    int[] array2 = { 1, 2, 3 };

    var q =
        from n in array1
        from m in array2
        select $"{n}{m}";

    foreach (var i in q)
        Console.WriteLine(i);
}

メソッド構文

メソッド構文を使用する場合は、SelectManyメソッドを使用します。

static void Func3()
{
    string[] array1 = { "A", "B", "C" };
    int[] array2 = { 1, 2, 3 };

    var q = array1.SelectMany(
        _ => array2,
        (n, m) => $"{n}{m}");

    foreach (var i in q)
        Console.WriteLine(i);
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください