如何编写动态for循环级别?

Ask*_*ker 6 c# recursion for-loop traversal dynamic

我的问题是这样的:

我有几个列表需要进行置换,但列表编号是不可知的.每个列表中的每个元素编号也是不可知的.Sicne我想遍历所有列表元素组合,例如1)从列表1中选择A,从列表2中选择A,从列表3中选择A; 2)ick A来自列表1,A来自列表2,B来自列表3 ...用于所有排列.

我使用嵌套的for循环来遍历,就像我有两个列表一样,然后:

        for (int i = 0; i < list[0].EnergyParameters.ListEnergyLevelCandidates.Count; i++)
        {
            for (int j = 0; j < list[1].EnergyParameters.ListEnergyLevelCandidates.Count; j++)
            {
                // Do sth
            }
        }
Run Code Online (Sandbox Code Playgroud)

如果我有三个列表,那么:

        for (int i = 0; i < list[0].EnergyParameters.ListEnergyLevelCandidates.Count; i++)
        {
            for (int j = 0; j < list[1].EnergyParameters.ListEnergyLevelCandidates.Count; j++)
            {
                for (int k = 0; k < list[2].EnergyParameters.ListEnergyLevelCandidates.Count; k++)
                {
                    // Do sth
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

因为列表号是不可知的,所以嵌套号是不可知的,这意味着,我不知道需要写多少级for循环.

在这种情况下,如何编写动态for循环级别的代码?我不想为10个列表编写10个循环.

das*_*ght 11

如果您不知道有多少列表,则不要编写嵌套循环:而是编写递归.在调用的每个级别,您循环一个列表,如下所示:

void AllCombos(List<string>[] lists, int level, string[] current) {
    if (level == lists.Length) {
        // Do somthing; items of current[] contain elements of the combination
    } else {
        foreach (var s in lists[level]) {
            current[level] = s;
             AllCombos(lists, level+1, current);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请致电AllCombos如下:

var lists = new List<string>[10];
for (int i = 0 ; i != 10 ; i++) {
    lists[i] = PopulateMyList(i);
}
string[] current = new string[lists.Length];
AllCombos(lists, 0, current);
Run Code Online (Sandbox Code Playgroud)