Skip to content

Instantly share code, notes, and snippets.

@mshwf
Created May 13, 2018 13:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mshwf/cca9628493cf75f3921d40962ac18524 to your computer and use it in GitHub Desktop.
Save mshwf/cca9628493cf75f3921d40962ac18524 to your computer and use it in GitHub Desktop.
public static IEnumerable<T> InterlockWith<T>(this IEnumerable<T> seq1, IEnumerable<T> seq2)
{
Tuple<T[], int>[] metaSequences = new Tuple<T[], int>[2];
metaSequences[0] = Tuple.Create(seq1.ToArray(), seq1.Count());
metaSequences[1] = Tuple.Create(seq2.ToArray(), seq2.Count());
var orderedMetas = metaSequences.OrderBy(x => x.Item2).ToArray();
for (int i = 0; i < orderedMetas[0].Item2; i++)
{
yield return metaSequences[0].Item1[i];
yield return metaSequences[1].Item1[i];
}
var remainingItems = orderedMetas[1].Item1.Skip(orderedMetas[0].Item2);
foreach (var item in remainingItems)
{
yield return item;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment