Skip to content

Instantly share code, notes, and snippets.

@dcastro
Created August 18, 2014 07:58
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 dcastro/425aab926d4052595bef to your computer and use it in GitHub Desktop.
Save dcastro/425aab926d4052595bef to your computer and use it in GitHub Desktop.
Enumerable.ZipAll
// https://dotnetfiddle.net/INhbdg
public static class EnumerableEx
{
public static IEnumerable<TReturn> ZipAll<T1, T2, TReturn>(
this IEnumerable<T1> first,
IEnumerable<T2> second,
Func<T1, T2, TReturn> f,
T1 seed1,
T2 seed2)
{
var iter1 = first.GetEnumerator();
var iter2 = second.GetEnumerator();
while(iter1.MoveNext())
{
if(iter2.MoveNext())
yield return f(iter1.Current, iter2.Current);
else
yield return f(iter1.Current, seed2);
}
while(iter2.MoveNext())
yield return f(seed1, iter2.Current);
}
public static IEnumerable<TReturn> ZipAll<T1, T2, TReturn>(
this IEnumerable<T1> first,
IEnumerable<T2> second,
Func<T1, T2, TReturn> f)
{
return first.ZipAll(second, f, default(T1), default(T2));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment