Um novo método (de extensão) foi adicionado à classe Enumerable na versão 4.0 do .NET, chamado de Zip. Dado duas coleções/arrays, esse método tem a finalidade de aplicar uma espécie de “zíper” entre eles, ou seja, agrupando os elementos correntes de cada coleção, onde o resultado é a combinação entre esses dois elementos. Para exemplificar, considere os dois arrays de inteiros:
int[] pares = new int[] { 0, 2, 4, 6, 8 };
int[] impares = new int[] { 1, 3, 5, 7, 9 };
foreach (var item in impares.Zip(pares, (i, p) => string.Format(“{0}, {1}, “, p, i)))
Console.Write(item);
O resultado ficará: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. O processamento se encerra quando não for encontrado um elemento “correspondente” na outra coleção.
Quando há elementos iguais nas duas listas, o que acontece?
Boas Fernando,
Não importa. Na verdade, ele vai passando o que encontra em ambas para o delegate, que por sua vez, faz o que quiser com os elementos. A implementação é qualquer coisa como:
IEnumerator e1 = source.GetEnumerator();
IEnumerator e2 = otherSource.GetEnumerator();
while(e1.MoveNext() && e2.MoveNext())
func(e1.Current, e2.Current);