読者です 読者をやめる 読者になる 読者になる

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

linq c#

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

コレクションの要素を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]
*/

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

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