J'essaie d'écrire une instruction LINQ qui me renvoie toutes les combinaisons possibles de nombres (j'en ai besoin pour un test et j'ai été inspiré par ce article of Eric Lippert). J'appelle le prototype de la méthode ressemble à:Générer des séquences de nombres avec LINQ
IEnumerable<Collection<int>> AllSequences(int start, int end, int size);
Les règles sont les suivantes:
- tous retournés collections ont une longueur de
size
- valeurs numériques dans une collection doivent augmenter
- chaque numéro entre
start
etend
doivent être utilisés
appelant Ainsi, le AllSequences(1, 5, 3)
devrait se traduire par 10 collections, chacune de la taille 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
Maintenant, en quelque sorte, je voudrais vraiment voir un LINQ pur solution. Je suis capable d'écrire une solution non LINQ par moi-même, alors ne mettez pas d'effort dans une solution sans LINQ.
Mes essais jusqu'à présent terminée à un point où je dois rejoindre un numéro avec le résultat d'un appel récursif de ma méthode - quelque chose comme:
return from i in Enumerable.Range(start, end - size + 1)
select BuildCollection(i, AllSequences(i, end, size -1));
Mais je ne peux pas le gérer à mettre en œuvre sur une BuildCollection()
LINQ base - ou même ignorer cet appel de méthode. Pouvez-vous m'aider ici?
@Noldorin, @Fede: Merci pour les grandes réponses - je dois certainement regarder de plus près les méthodes de 'Enumerable' (comme' répétition() '' ou concat() ') – tanascius