Open
Description
Given an input of type IEnumerable<IEnumerable<T>>
its hard to call Interleave
on it:
Enumerable.Empty<T>.Interleave(input);
input.First().Interleave(input.Skip(1));
I propose to add an Interleave
overload as a classic static method:
public static IEnumerable<T> Interleave<T>(IEnumerable<IEnumerable<T>> otherSequences);
// usage
MoreEnumerable.Interleave(input);
Or as an extension method:
public static IEnumerable<T> Interleave<T>(this IEnumerable<IEnumerable<T>> otherSequences);
// usage
input.Interleave();
We can also add an overload with the SelecMany
pattern:
public static IEnumerable<TResult> Interleave<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, IEnumerable<TResult>> selector);
// usage
new [] {"AAA", "BBB", "CCC"}.Interleave(e => e); // 'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'
Metadata
Metadata
Assignees
Labels
No labels