Provo a scrivere una istruzione LINQ che restituisce tutte le possibili combinazioni di numeri (ho bisogno di questo per un test e sono stato ispirato da questo article of Eric Lippert). il prototipo del metodo che io chiamo assomiglia:Generare sequenze di numeri con LINQ
IEnumerable<Collection<int>> AllSequences(int start, int end, int size);
Le regole sono:
- tutti tornati collezioni hanno una lunghezza di
size
- valori numerici all'interno di una collezione sono di aumentare
- ogni numero compreso tra
start
eend
devono essere utilizzati
Quindi chiamando il AllSequences(1, 5, 3)
dovrebbe risultare in 10 collezioni, ognuno di dimensioni 3:
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
Ora, in qualche modo mi piacerebbe davvero vedere un pura LINQ soluzione. Sono in grado di scrivere una soluzione LINQ non per conto mio, quindi per favore non fare uno sforzo in una soluzione senza LINQ.
miei tentativi finora si è conclusa in un punto in cui devo partecipare a un numero con il risultato di una chiamata ricorsiva del mio metodo - qualcosa come:
return from i in Enumerable.Range(start, end - size + 1)
select BuildCollection(i, AllSequences(i, end, size -1));
ma non riesco a gestirlo per implementare BuildCollection()
su un LINQ base - o anche saltare questa chiamata di metodo. Puoi aiutarmi qui?
@Noldorin, @Fede: Grazie per le grandi risposte - ho sicuramente dare un'occhiata più da vicino i metodi di 'Enumerable' (come' Repeat() 'o' Concat() ') – tanascius