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

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


arrow_upward
2
arrow_downward

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

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

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

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

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