Powerset из списка строк, содержащих все возможные комбинации - PullRequest
1 голос
/ 26 июня 2019

У меня есть набор данных в list например

  • Джон

  • Джеймс

  • Смит

  • j

  • с

из этого мне нужны все возможные комбинации инапример,

  • js James

  • sj James

  • Смит Джеймс

  • j james

  • sj

размер списка не задан и основан на данных, введенных пользователем

Я рассмотрел несколько решений здесь и приблизился к получению того, что мне нужно, например, я получаю возврат

  • js james

  • sj Джеймс

  • Смит Джеймс Джеймс

но я никогда не получу результат, который начинается с Джеймса

некоторые решения, представленные в следующих ссылках Список всех перестановок строки / целого числа Создание набора степеней последовательности Все возможные комбинации из списка значений

public static IList<IList<T>> PowerSet<T>(IList<T> list)
{       
    int n = 1 << list.Count;
    IList<IList<T>> powerset = new List<IList<T>>();
    for (int i = 0; i < n; ++i)
    {
        IList<T> set = new List<T>();
        for (int bits = i, j = 0; bits != 0; bits >>= 1, ++j)
        {
            if ((bits & 1) != 0)
                set.Add(list[j]);
        }
        powerset.Add(set);
    }
    return powerset;
}

Бросив list в приведенном выше коде, я получаю ближайшее значение, но не возвращает все возможные комбинации

Я получил этот код отсюда, но я буду проклят, если смогу найти оригинальную публикацию, вся благодарность оригинальному постеру, а не мне за вышеуказанный код

...