Перебрать все возможные комбинация списка списков строк
У меня есть список списков строк, который представляет таблицу:
В коде это условно выглядет так:
var content = new List<List<string>>
{
new List<string> { "Парень" },
new List<string> { "Белый", "Смуглый" },
new List<string> { "Сигарета", "Чупачупс" },
};
Список может иметь разное количество столбцов и каждый столбец разное коичество строк. Нужно как-то перебрать все возможные варианты. Результат должен выглядеть так:
В коде это должно выглядеть как матричный массив строк string[,] или список списков строк List<List<string>>.
Как можно такое реализовать? Как тут правильно применить рекурсию?
Ответы (1 шт):
Автор решения: tym32167
→ Ссылка
Как пример
private void GetTable(List<List<string>> content, int index, List<string> state, List<List<string>> ret)
{
if (index >= content.Count)
{
ret.Add(new List<string>(state));
return;
}
foreach (var item in content[index])
{
state.Add(item);
GetTable(content, index + 1, state, ret);
state.RemoveAt(state.Count - 1);
}
}
Проверка
var content = new List<List<string>>
{
new List<string> { "Парень" },
new List<string> { "Белый", "Смуглый" },
new List<string> { "Сигарета", "Чупачупс" },
};
var res = new List<List<string>>();
GetTable(content, 0, new List<string>(), res);
foreach (var row in res)
Console.WriteLine(string.Join(",", row));
Вывод
Парень,Белый,Сигарета
Парень,Белый,Чупачупс
Парень,Смуглый,Сигарета
Парень,Смуглый,Чупачупс

