Split
somtimes one needs to split a larger collection into multiple smaller ones, this one does so use deferred execution
Source
public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, int splitSize)
{
    using (IEnumerator<T> enumerator = source.GetEnumerator())
    {
        while (enumerator.MoveNext())
        {
            yield return InnerSplit(enumerator, splitSize);
        }
    }
}
       
private static IEnumerable<T> InnerSplit<T>(IEnumerator<T> enumerator, int splitSize)
{
    int count = 0;
    do
    {
        count++;
        yield return enumerator.Current;
    }
    while (count % splitSize != 0
         && enumerator.MoveNext());
}Example
var nums = Enumerable.Range(0, 18);
var split = nums.Split(5);
foreach (var item in split)
{
    foreach (var inner in item)
    {
        Console.WriteLine(inner);
    }
}Author: Eckhard Schwabe
Submitted on: 6 mrt. 2009
Language: C#
Type: System.Collections.Generic.IEnumerable<T>
Views: 10645