如何为动态 for 循环级别编写代码
本文关键字:代码 循环 动态 for | 更新日期: 2023-09-27 18:34:48
我的问题是这样的:
我有几个列表需要排列,但列表编号是不可知的。每个列表中的每个元素编号也是不可知的。Sicne 我想遍历所有列表元素组合,例如 1( 从列表 1 中选择 A,从列表 2 中选择 A,从列表 3 中选择 A;2( 来自列表 1 的 A、列表 2 中的 A、列表 3 中的 B ...对于所有排列。
我使用嵌套的 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
}
}
如果我有三个列表,那么:
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
}
}
}
因为列表编号是不可知的,所以巢号是不可知的,这意味着,我不知道需要写多少级的for循环。
在这种情况下,如何编写动态 for 循环级别的代码?我不想为 10 个列表编写 10 个循环。
如果你不知道有多少个列表,你不要写嵌套循环:而是写递归。在调用的每个级别,您循环一个列表,如下所示:
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);
}
}
}
按如下方式调用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);