Skip to content

[Proposal] Add Interleave overloads. #697

Open
@Orace

Description

@Orace

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions