using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var input = new List<List<string>>
{
new List<string> {"a", "b", "c"},
new List<string> {"d", "e"},
new List<string> {"f", "g", "h", "i"},
new List<string> {"j"},
new List<string> {"k", "l"}
};
var chunks = Split(input, 2);
foreach (var chunk in chunks)
{
Console.WriteLine("Chunk");
foreach (var item in chunk)
{
Console.WriteLine(string.Join(",", item.ToArray()));
}
Console.WriteLine("---");
}
Console.ReadLine();
}
public static IEnumerable<IEnumerable<T>> Split<T>(IEnumerable<T> source, int chunkSize)
{
var chunk = new List<T>(chunkSize);
foreach (var item in source)
{
chunk.Add(item);
if (chunk.Count == chunkSize)
{
yield return chunk;
chunk.Clear();
}
}
if (chunk.Count > 0)
{
yield return chunk;
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCmNsYXNzIFByb2dyYW0KewogICAgc3RhdGljIHZvaWQgTWFpbigpCiAgICB7CiAgICAgICAgdmFyIGlucHV0ID0gbmV3IExpc3Q8TGlzdDxzdHJpbmc+PgogICAgICAgIHsKICAgICAgICAgICAgbmV3IExpc3Q8c3RyaW5nPiB7ImEiLCAiYiIsICJjIn0sCiAgICAgICAgICAgIG5ldyBMaXN0PHN0cmluZz4geyJkIiwgImUifSwKICAgICAgICAgICAgbmV3IExpc3Q8c3RyaW5nPiB7ImYiLCAiZyIsICJoIiwgImkifSwKICAgICAgICAgICAgbmV3IExpc3Q8c3RyaW5nPiB7ImoifSwKICAgICAgICAgICAgbmV3IExpc3Q8c3RyaW5nPiB7ImsiLCAibCJ9CiAgICAgICAgfTsKICAgICAgICB2YXIgY2h1bmtzID0gU3BsaXQoaW5wdXQsIDIpOwogICAgICAgIGZvcmVhY2ggKHZhciBjaHVuayBpbiBjaHVua3MpCiAgICAgICAgewogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiQ2h1bmsiKTsKICAgICAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gY2h1bmspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKHN0cmluZy5Kb2luKCIsIiwgaXRlbS5Ub0FycmF5KCkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiLS0tIik7CiAgICAgICAgfQogICAgICAgIENvbnNvbGUuUmVhZExpbmUoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIElFbnVtZXJhYmxlPElFbnVtZXJhYmxlPFQ+PiBTcGxpdDxUPihJRW51bWVyYWJsZTxUPiBzb3VyY2UsIGludCBjaHVua1NpemUpCiAgICB7CiAgICAgICAgdmFyIGNodW5rID0gbmV3IExpc3Q8VD4oY2h1bmtTaXplKTsKICAgICAgICBmb3JlYWNoICh2YXIgaXRlbSBpbiBzb3VyY2UpCiAgICAgICAgewogICAgICAgICAgICBjaHVuay5BZGQoaXRlbSk7CiAgICAgICAgICAgIGlmIChjaHVuay5Db3VudCA9PSBjaHVua1NpemUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHlpZWxkIHJldHVybiBjaHVuazsKICAgICAgICAgICAgICAgIGNodW5rLkNsZWFyKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChjaHVuay5Db3VudCA+IDApCiAgICAgICAgewogICAgICAgICAgICB5aWVsZCByZXR1cm4gY2h1bms7CiAgICAgICAgfQogICAgfQp9Cg==