Все комбинации 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();
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5