Ich versuche eine LINQ-Anweisung zu schreiben, die mir alle möglichen Zahlenkombinationen zurückgibt (ich brauche das für einen Test und ich wurde von dieser article of Eric Lippert inspiriert). Die Prototyp-Methode nenne ich wie folgt aussieht:Generiere Zahlenfolgen mit LINQ
IEnumerable<Collection<int>> AllSequences(int start, int end, int size);
Die Regeln sind:
- alle zurück Sammlungen eine Länge von
size
- Zahlenwerte innerhalb einer Sammlung
- haben zu erhöhen haben jede Zahl zwischen
start
undend
sollten verwendet werden
ruft also die AllSequences(1, 5, 3)
in 10 Sammlungen führen sollte, die jeweils eine Größe 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
Nun, irgendwie habe ich wirklich eine reine LINQ Lösung sehen möchten. Ich bin in der Lage, eine nicht-LINQ-Lösung selbst zu schreiben, also bitte keine Anstrengung in eine Lösung ohne LINQ.
Meine versucht so an einem Punkt weit beendet, wo ich eine Zahl mit dem Ergebnis eines rekursiven Aufruf meiner Methode verbinden - so etwas wie:
return from i in Enumerable.Range(start, end - size + 1)
select BuildCollection(i, AllSequences(i, end, size -1));
Aber ich es nicht schaffen BuildCollection()
auf einem implementieren LINQ-Basis - oder überspringen Sie diesen Methodenaufruf. Kannst du mir hier helfen?
@Noldorin, @Fede: Danke für die tollen Antworten - ich auf jeden Fall einen genaueren Blick auf den Methoden des 'Enumerable' (wie' Repeat() 'oder' Concat() ') nehmen muß – tanascius