LINQでn個ずつグルーピング

前に少し考えたときは思いつかなかったのですが、今日ふと思い立って書いてみました。

コレクションの要素を5個ずつでグルーピングするサンプルです。

static void Main(string[] args) {
    var letters = "abcdefghijklmnopqrstuvwxyz".ToCharArray();
    Console.WriteLine("これが");
    Console.WriteLine("[{0}]", string.Join(", ", letters));

    var count = 5; // 5個ずつでグルーピング
    var groups = letters
        .Select((letter, index) => new { Letter = letter, Index = index })
        .GroupBy(entry => entry.Index / count, entry => entry.Letter);

    Console.WriteLine();
    Console.WriteLine("こう");
    foreach (var group in groups) {
        Console.WriteLine("[{0}]", string.Join(", ", group));
    }
}

// 結果
/*
これが
[a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]

こう
[a, b, c, d, e]
[f, g, h, i, j]
[k, l, m, n, o]
[p, q, r, s, t]
[u, v, w, x, y]
[z]
*/

なんで考え込んでたかわからないくらいのあっさり感。

こういうのがサラッと出てくるようになりたいものだと思いました。