ho: -Zip N IEnumerable <T> s insieme? Iterate su di loro contemporaneamente?
IEnumerable<IEnumerable<T>> items;
e mi piacerebbe creare: -
IEnumerable<IEnumerable<T>> results;
dove la prima voce "risultato" è un IEnumerable del primo elemento di ciascuna delle IEnumerables di "articoli", il secondo elemento in "risultati" è un oggetto IEnumerable del secondo elemento di ciascuno di "articoli", ecc.
Gli elementi IEnumerables non hanno necessariamente le stesse lunghezze. Se alcuni degli elementi IEnumerable negli elementi non hanno un elemento in un particolare indice, mi aspetto che l'IEnumerable corrispondente nei risultati contenga un numero inferiore di elementi.
Ad esempio: -
items = { "1", "2", "3", "4" } , { "a", "b", "c" };
results = { "1", "a" } , { "2", "b" }, { "3", "c" }, { "4" };
Modifica: altro esempio (richiesto nei commenti): -
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" };
non so in anticipo quanti sequenze ci sono, né quanti elementi sono in ogni sequenza. Potrei avere 1.000 sequenze con 1.000.000 di elementi in ciascuna, e potrei aver bisogno solo del primo ~ 10, quindi mi piacerebbe usare l'enumerazione (pigra) delle sequenze di sorgenti, se possibile. In particolare, non voglio creare una nuova struttura dati se posso aiutarla.
Esiste un metodo incorporato (simile a IEnumerable.Zip) che può eseguire questa operazione?
C'è un altro modo?
Cosa succede se gli articoli contengono tre sequenze? –
È simile a ["Come eseguire iterazioni su due array contemporaneamente?"] (Http://stackoverflow.com/questions/496704/how-to-iterate-over-two-arrays-at-once) (che copre il caso di N = 2) –
Controlla il blog di Eric Lippert (che si è ampliato da una risposta a una domanda SO) sul calcolo di un prodotto cartesiano su molte sequenze arbitrariamente. http://blogs.msdn.com/b/ericlippert/archive/2010/06/28/computing-a-cartesian-product-with-linq.aspx –