динамически добавлять разные строки в базу списка массивов по шаблону / алгоритму / формуле

есть ли способ динамически добавить весь этот процесс добавления вместо того, чтобы вручную вводить значения, такие как 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 будет содержать весь набор подмножеств на основе максимального условия.

Ура, Джаф


person user434753    schedule 02.09.2010    source источник
comment
@ jbs135: в стороне, рассмотрите возможность реализации List<string> вместо ArrayList.   -  person p.campbell    schedule 02.09.2010
comment
Вы ведь понимаете, что существуют не все подмножества (например, нет 1 и 3 или 1 и 4), верно?   -  person NullUserException    schedule 02.09.2010


Ответы (1)


Это звучит так, будто вам может понадобиться набор мощности (набор все подмножества некоторого заданного набора), но из вашего примера похоже, что вы хотите перечислить все подсписки в списке, используя скользящее окно.

Если вам нужна мощность:

Пример кода для создания комплектов питания доступен в этом ответе на аналогичный вопрос.

Если вам нужны подсписки с скользящим окном:

Вы можете сделать что-то подобное с помощью приведенного ниже кода. Пример выводит на печать именно то, что вы указали выше (используя размер скользящего окна от 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);
    }
}
person Chris Schmich    schedule 02.09.2010