C# 如何在没有显式嵌套循环的情况下生成N个元素的组合,每个元素的供应量有限(2个)

C# 如何在没有显式嵌套循环的情况下生成N个元素的组合,每个元素的供应量有限(2个),c#,combinations,C#,Combinations,如果N是固定的,比如N=3,那么很容易,我可以使用深度为3的嵌套循环。 e、 g 如果N是一个变量呢?您需要的是某种数组“multiplyer”。大概是这样的: private static IEnumerable<int[]> Multiply(IEnumerable<int[]> input, IEnumerable<int> multiplyers) { foreach (var array in input) {

如果N是固定的,比如N=3,那么很容易,我可以使用深度为3的嵌套循环。 e、 g


如果N是一个变量呢?

您需要的是某种数组“multiplyer”。大概是这样的:

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);
}

现在n是可变的。

Duplicate:我不喜欢的部分是,你最终得到了一个可变维度的数组。你真的确定这就是你想要的吗?@Tipx-我认为目的是生成一个N元素数组的集合,这就是示例所做的
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);
}