Я попытался написать метод, который, учитывая переменную int Enumerable и int (назовем ее n), он генерирует все подпоследовательности, сумма которых меньше n.
Вот как это происходит:
public static IEnumerable<IEnumerable<int>> SubSWithSumSmallerThanN(this IEnumerable<int> intEnum, int n)
{
var numbers = intEnum.ToList();
return Enumerable
.Range(1, numbers.Count)
.SelectMany(length => Enumerable.Range(0, numbers.Count - length + 1)
.Select(x => numbers.TakeWhile(y => numbers.IndexOf(y) > x && numbers.IndexOf(y) < x + length)))
.Where(x => x.Sum() <= n)
.ToArray();
}
В принципе, это не работает. Для простого примера, такого как
{1, 5, 3, 8}, n = 7
, тогда как результат должен быть
{{1}, {5}, {3}, {1, 5}}
, фактический результат таков:
Expected: List<IEnumerable<Int32>> [[1], [5], [3], [1, 5]]
Actual: IEnumerable`1[] []
Он генерирует в основном пустой IEnumerable . Как это исправить?