CSharp · Console
using System;
using System.Collections.Generic;
public static class Program
{
public static void Main()
{
var first = new int[] { 1, 2, 3, 4, 5 };
var second = new string[] { "a", "b", "c" };
var zipped = first.Zip(second, (f, s) => new { f, s });
var first1 = new int[] { 1, 2, 3 };
var second1 = new string[] { "a", "b", "c", "d", "e" };
var zipped1 = first1.Zip(second1, (f, s) => new { f, s });
foreach(var e in zipped1)
Console.WriteLine(e.f + e.s);
}
static IEnumerable<T> Zip<T1, T2, T>(this IEnumerable<T1> first,
IEnumerable<T2> second, Func<T1, T2, T> operation)
{
using (var iter1 = first.GetEnumerator())
using (var iter2 = second.GetEnumerator())
{
while (iter1.MoveNext())
{
if (iter2.MoveNext())
{
yield return operation(iter1.Current, iter2.Current);
}
else
{
yield return operation(iter1.Current, default(T2));
}
}
while (iter2.MoveNext())
{
yield return operation(default(T1), iter2.Current);
}
}
}
}