I have:-
IEnumerable> items;
and I\'d like to create:-
IEnumerable> r
Now lightly tested and with working disposal.
public static class Extensions
{
public static IEnumerable> JaggedPivot(
this IEnumerable> source)
{
List> originalEnumerators = source
.Select(x => x.GetEnumerator())
.ToList();
try
{
List> enumerators = originalEnumerators
.Where(x => x.MoveNext()).ToList();
while (enumerators.Any())
{
List result = enumerators.Select(x => x.Current).ToList();
yield return result;
enumerators = enumerators.Where(x => x.MoveNext()).ToList();
}
}
finally
{
originalEnumerators.ForEach(x => x.Dispose());
}
}
}
public class TestExtensions
{
public void Test1()
{
IEnumerable> myInts = new List>()
{
Enumerable.Range(1, 20).ToList(),
Enumerable.Range(21, 5).ToList(),
Enumerable.Range(26, 15).ToList()
};
foreach(IEnumerable x in myInts.JaggedPivot().Take(10))
{
foreach(int i in x)
{
Console.Write("{0} ", i);
}
Console.WriteLine();
}
}
}