ToLookup 拡張メソッド

以前に Partition 関数 - C#練習日記 を作りましたが、 Linq には ToLookup 拡張メソッド があり、このメソッドを使うことで同様のグルーピングを行うことができます。

using System;
using System.Linq;

class Program
{    
    static void Main()
    {
        var xs = new[] { 1, 2, 3, 4, 5 };

        // 偶数と奇数でグループ分けする
        var d = xs.ToLookup(e => e % 2 == 0);
        Console.WriteLine(string.Join(", ", d[true]));  // 2, 4
        Console.WriteLine(string.Join(", ", d[false])); // 1, 3, 5
        
        // 正の整数とそれ以外でグループ分けする
        var d2 = xs.ToLookup(e => e > 0);
        Console.WriteLine(d2[true].Count());  // 5 
        Console.WriteLine(d2[false].Count()); // 0
    }
}

ToLookup の戻り値は、ILookup<TKey, TElement> です。 各キーに対する要素は IEnumerable<TElement> で取得できます。