【问题标题】:How to generate combination of N elements with limited supply of 2 each without explicit nested loops如何在没有显式嵌套循环的情况下生成 N 个元素的组合,每个元素的供应量有限 2
【发布时间】:2011-11-02 12:44:01
【问题描述】:

如果 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 是一个变量呢?

【问题讨论】:

标签: c# combinations


【解决方案1】:

您需要的是某种数组“乘法器”。像这样的:

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 是可变的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2021-12-06
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多