Supongamos que tengo dos (o más) IEnumerable<T>
con muchos elementos. Cada IEnumerable
tiene otro tipo T
. Las listas pueden ser extremadamente largas y no deben cargarse completamente en la memoria.¿Cómo puedo iterar sobre varios IEnumerables simultáneamente?
IEnumerable<int> ints = getManyInts();
IEnumerable<string> strings = getSomeStrings();
IEnumerable<DateTime> dates = getSomeDates();
Lo que quiero hacer es iterar sobre estas listas, y obtener un artículo que contiene una intercepción, una cuerda y un DateTime para cada paso, hasta el final de la más larga o la lista más corta se ha alcanzado. Ambos casos deben ser compatibles (bool param más largo vs. más corto o más). Para cada elemento que no está disponible en las listas más cortas (porque el final ya se ha alcanzado) esperaría valores predeterminados.
for(Tuple<int,string,DateTime> item in
Foo.Combine<int,string,DateTime>(ints, strings, dates))
{
int i=item.Item1;
string s=item.Item2;
DateTime d=item.Item3;
}
¿Es posible hacer esto con linq utilizando la ejecución diferida? Conozco la solución que usa IEnumerators directamente combinada con el retorno de rendimiento. Ver How can I iterate over two IEnumerables simultaneously in .NET 2
Usted está buscando una función 'Zip' que acepte más de dos parámetros. – Gabe
Que puede hacer fácilmente usando algo como 'var result = s1.Zip (s2.Zip (s3, (a, b) => nuevo {a, b}), (a, b) => nuevo {a = a , b = ba, c = bb}); ' – Mormegil
¿Y si s2 fuera la lista más larga y s1 solo tuviera pocos elementos? –