Это звучит , как будто вам может потребоваться набор мощности (набор всех подмножеств некоторого данного набора), но из вашего примера, похоже, что вы хотите перечислить все-списки в списке с использованием скользящего окна.
Если вы хотите, чтобы блок питания:
Пример кода для генерации блоков питания доступен в этот ответ к аналогичному вопросу.
Если вам нужны подсписки скользящего окна:
Вы можете сделать что-то подобное с кодом ниже.В примере распечатывается именно то, что у вас есть выше (используя размер скользящего окна от 2 до 5 над набором {1, 2, 3, 4, 5}
).
Примечание: Для ясности, границ нетпроверка или обработка ошибок в коде ниже.Там должно быть абсолютно.
class Program
{
static void Main(string[] args)
{
foreach (var list in SlidingWindow<int>.Generate(new int[] { 1, 2, 3, 4, 5 }, 2, 5))
{
Console.WriteLine(string.Join(" & ", list));
}
}
}
static class SlidingWindow<T>
{
static public IEnumerable<IEnumerable<T>> Generate(ICollection<T> items, int minWindowSize, int maxWindowSize)
{
for (int i = minWindowSize; i < maxWindowSize; ++i)
{
foreach (var list in Generate(items, i))
yield return list;
}
}
static public IEnumerable<IEnumerable<T>> Generate(ICollection<T> items, int windowSize)
{
for (int i = 0; i < (items.Count - windowSize + 1); ++i)
yield return items.Skip(i).Take(windowSize);
}
}