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

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

Любой метод / способы приветствуются, если результаты совпадают, поскольку массив данных будет содержать весь набор подмножеств на основе максимального условия.

Приветствия, Jaf

1 Ответ

2 голосов
/ 02 сентября 2010

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

Если вы хотите, чтобы блок питания:

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

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

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