есть ли способ динамически добавить весь этот процесс добавления вместо того, чтобы вручную вводить значения, такие как a.Add("1 & 2"); и т. д., кстати, это происходит только в том случае, если я выбираю 5 условий - я делаю базу добавления на максимальном условии, которое я обслуживаю, которое 5
подмножества, которые я показываю ниже, должны быть в этом шаблоне, хотя это нормально, что порядок может быть другим, но значения должны увеличиваться, как (1 и 2 и 3). Таким образом, переход значений, таких как (1 и 4), не допускается, и нет обратного подмножества вроде (3 и 2)
ArrayList a = new ArrayList();
a.Add("1 & 2");
a.Add("2 & 3");
a.Add("3 & 4");
a.Add("4 & 5");
a.Add("1 & 2 & 3");
a.Add("2 & 3 & 4");
a.Add("3 & 4 & 5");
a.Add("1 & 2 & 3 & 4");
a.Add("2 & 3 & 4 & 5");
Итак, если у меня есть 6 условий, то список будет добавлен для подмножеств типа два (5 и 6), введите 3 подмножества (4, 5 и 6), ... продолжается, что даже создаст другой тип подмножеств, если это возможно, что будет быть типом 5 (1, 2, 3, 4 и 5) в этом случае
Приветствуются любые методы / способы, если результаты совпадают, то есть arrayylist будет содержать весь набор подмножеств на основе максимального условия.
Ура, Джаф
Ответ 1 · рейтинг 2 · Chris Schmich
Это звучит так, будто вам может понадобиться набор мощности (набор все подмножества некоторого заданного набора), но из вашего примера похоже, что вы хотите перечислить все подсписки в списке, используя скользящее окно.
Если вам нужна мощность:
Пример кода для создания комплектов питания доступен в этом ответе на аналогичный вопрос.
Если вам нужны подсписки с скользящим окном:
Вы можете сделать что-то подобное с помощью приведенного ниже кода. Пример выводит на печать именно то, что вы указали выше (используя размер скользящего окна от 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);
}
}