如果 N 是固定的,比如 N = 3,那么很容易,我可以使用深度为 3 的嵌套循环。
例如
from i in Enumerable.Range(0, 2)
from j in Enumerable.Range(0, 2)
from k in Enumerable.Range(0, 2)
select new int[] { i, j, k };
如果 N 是变量怎么办?
您需要的是某种数组“乘数”。像这样的东西:
private static IEnumerable<int[]> Multiply(IEnumerable<int[]> input,
IEnumerable<int> multiplyers)
{
foreach (var array in input)
{
foreach (var multiplyer in multiplyers)
{
yield return array.Concat(new int[] { multiplyer })
.ToArray();
}
}
}
您可以按如下方式使用此方法来获得与上面示例相同的结果:
int n = 3;
var multiplyers = Enumerable.Range(0, 2);
IEnumerable<int[]> results =
from m in multiplyers select new int[] { m };
while (n-- > 1)
{
results = Multiply(results, multiplyers);
}
Now n
是可变的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)