public static class Extensions
{
public static IEnumerable<IEnumerable<T>> Segment<T>(this IEnumerable<T> data, int segmentSize)
{
double dataSize = data.Count();
var segmentCount = segmentSize == 0 ? 0 : (int)Math.Ceiling(dataSize / segmentSize);
return Enumerable.Range(0, segmentCount).Select(i => data.Skip(i * segmentSize).Take(segmentSize));
}
}
{
public static IEnumerable<IEnumerable<T>> Segment<T>(this IEnumerable<T> data, int segmentSize)
{
double dataSize = data.Count();
var segmentCount = segmentSize == 0 ? 0 : (int)Math.Ceiling(dataSize / segmentSize);
return Enumerable.Range(0, segmentCount).Select(i => data.Skip(i * segmentSize).Take(segmentSize));
}
}
Using the extension method is as easy as:
var segments = Enumerable.Range(1, 10).Segment(3);
The results of running the above code is as follows:
Probably not the best solution since it does iterate over the collection multiple times, but it gets the job done. Enjoy.

No comments:
Post a Comment