Eventuali duplicati:
Generating all Possible CombinationsN-enumerables in una istruzione LINQ?
io non sono sicuro di come formulare la domanda; ma stavo lavorando a uno stupido puzzle logico che ero in grado di risolvere usando una dichiarazione LINQ. Il codice in questione si presentava così:
(from myA in Enumerable.Range(1, 40)
from myB in Enumerable.Range(1, 40)
from myC in Enumerable.Range(1, 40)
from myD in Enumerable.Range(1, 40)
where myA + myB + myC + myD == 40
&& myA <= myB
&& myB <= myC
&& myC <= myD
select new[] {myA, myB, myC, myD})
quindi è praticamente generare tutte le combinazioni di A, B, C D che soddisfano i criteri nella clausola WHERE.
Quello che sto cercando di fare ora è generalizzare, così posso fare esattamente la stessa cosa con N valori invece di solo quattro. Ad esempio, con 3 valori - il codice equivalente sarebbe:
(from myA in Enumerable.Range(1, 40)
from myB in Enumerable.Range(1, 40)
from myC in Enumerable.Range(1, 40)
where myA + myB + myC == 40
&& myA <= myB
&& myB <= myC
select new[] {myA, myB, myC})
Naturalmente, non voglio modificare il codice - Voglio una funzione che posso chiamare e di fornire un numero intero e farlo tornare il corretto oggetto.
Ho fatto alcuni tentativi sbagliati; ma davvero non riesco a vedere come fare una cosa del genere. Qualcuno può indicarmi la giusta direzione?
Eric Lippert [bloggato su questo] (http://blogs.msdn.com/b/ericlippert/archive/2010/06/28/computing-a-cartesian- product-with-linq.aspx) per quanto riguarda i prodotti informatici di molte sequenze. Potrebbe aiutare. –
@AnthonyPegram - È perfetto. Esattamente quello che sto cercando. Se vuoi pubblicarlo come risposta, lo accetterei. –
Non è la * mia * risposta. ;) Se desideri dare credito a chi è dovuto il credito, [prova qui] (http://stackoverflow.com/a/3098381/414076) –