tengo: -Zip N IEnumerable <T> s juntos? Iterato sobre ellos al mismo tiempo?
IEnumerable<IEnumerable<T>> items;
y me gustaría crear: -
IEnumerable<IEnumerable<T>> results;
donde el primer elemento de "resultados" es un IEnumerable del primer elemento de cada uno de los IEnumerables de "artículos", el segundo elemento en "resultados" es un IEnumerable del segundo elemento de cada uno de "artículos", etc.
Los IEnumerables no son necesariamente de la misma longitud. Si algunos de los IEnumerables en elementos no tienen un elemento en un índice en particular, entonces esperaría que el IEnumerable coincidente en los resultados tenga menos elementos en él.
Por ejemplo: -
items = { "1", "2", "3", "4" } , { "a", "b", "c" };
results = { "1", "a" } , { "2", "b" }, { "3", "c" }, { "4" };
Editar: Otro ejemplo (solicitada en los comentarios): -
items = { "1", "2", "3", "4" } , { "a", "b", "c" }, { "p", "q", "r", "s", "t" };
results = { "1", "a", "p" } , { "2", "b", "q" }, { "3", "c", "r" }, { "4", "s" }, { "t" };
No sé de antemano cuántas secuencias no son, ni cuántos elementos están en cada secuencia. Podría tener 1,000 secuencias con 1,000,000 de elementos en cada una, y tal vez solo necesite las primeras ~ 10, así que me gustaría usar la enumeración (diferida) de las secuencias fuente si puedo. En particular, no quiero crear una nueva estructura de datos si puedo evitarlo.
¿Hay algún método incorporado (similar a IEnumerable.Zip) que pueda hacer esto?
¿Hay alguna otra manera?
¿Qué sucede si los artículos contienen tres secuencias? –
Esto es similar a ["¿Cómo iterar sobre dos matrices a la vez?"] (Http://stackoverflow.com/questions/496704/how-to-iterate-over-two-arrays-at-once) (que cubre el caso de N = 2) –
Consulte el blog de Eric Lippert (que se expandió de una respuesta a una pregunta de SO) sobre la computación de un producto cartesiano sobre muchas secuencias arbitrariamente. http://blogs.msdn.com/b/ericlippert/archive/2010/06/28/computing-a-cartesian-product-with-linq.aspx –