Все комбинации List[] переменной - C#
Формулировка задачи:
Всем добра!
Либо я криво гуглю, либо я слишком плохо прогаю
Нужно написать функцию То есть
int[][] Func(params List<int>[] _Filters)
, которая получает все комбинации значений массива_Filters
в массивint[][] result
Но!
Обычными 2-мя циклами здесь не обойтись, так как комбинации нужны особенные, а именно:int[][] result = Func(
new List<int> { 1, 2, 3, 4 },
new List<int> { 5 },
new List<int> { 6, 7 },
);
/**
* result[0][0] = 1
* result[0][1] = 5
* result[0][2] = 6
*
* result[1][0] = 1
* result[1][1] = 5
* result[1][2] = 7
*
* ...
**/1-й индекс
массива комбинацийразмером _Filters.Length (количеством List`ов)
являетсяномером комбинации
, а2-й индекс
являетсязначением из соответствующего List`а
в массиве_Filters
(то естьresult[][k]
соответствует значению изk`ого List`а
в массиве_Filters
) Помогите, пожалуйста, хотя бы гуглофразой! Бьюсь уже несколько часов.. Решение задачи: «Все комбинации List[] переменной»
textual
Листинг программы
static T[][] Func<T>(params IList<T>[] lists)
{
var all = new List<T[]>();
var idx = new int[lists.Length];
while (idx[0] < lists[0].Count)
{
all.Add(lists.Select((list, i) => list[idx[i]]).ToArray());
idx[idx.Length - 1] += 1;
for (int i = idx.Length - 1; i > 0; i--)
{
idx[i - 1] += idx[i] / lists[i].Count;
idx[i - 0] %= lists[i].Count;
}
}
return all.ToArray();
}