Я пытаюсь написать оператор LINQ, который возвращает мне все возможные комбинации чисел (мне это нужно для теста, и я был вдохновлен этой статьей Эрика Липперта). Прототип метода, который я вызываю, выглядит так:
IEnumerable<Collection<int>> AllSequences( int start, int end, int size );
Правила:
- все возвращенные коллекции имеют длину
size
- Значения чисел внутри коллекции должны увеличиваться
- следует использовать каждое число между
start
иend
Таким образом, при вызове AllSequences( 1, 5, 3 )
должно появиться 10 коллекций, каждый из которых имеет размер 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
Теперь мне как-то хотелось бы увидеть решение pure LINQ. Я могу написать решение, отличное от LINQ, самостоятельно, поэтому не прилагайте никаких усилий к решению без LINQ.
Мои попытки до сих пор заканчивались в точке, где мне нужно присоединиться к числу с результатом рекурсивного вызова моего метода - что-то вроде:
return from i in Enumerable.Range( start, end - size + 1 )
select BuildCollection(i, AllSequences( i, end, size -1));
Но я не могу управлять им, чтобы реализовать BuildCollection()
в базе LINQ - или даже пропустить этот вызов метода. Вы можете мне помочь?