如何递归枚举未知大小的序列

问题描述

我正在尝试编写一种方法,该方法枚举可以在for循环中使用的所有序列。

假设IEnumerable<int>[] intValues是整数的原始集合,假设它是:

intValues[0] = int[] {1,2,3}
intValues[1] = int[] {4,5}

我需要这样写EnumerateSequences(...)

foreach (int[] seq in EnumerateSequences(...))
{
    // 1st iteration: seq = [1,4]
    // 2nd iteration: seq = [1,5]
    // 3rd iteration: seq = [2,4]
    // 4th iteration: seq = [2,5]
    // 5th iteration: seq = [3,4]
    // 6th iteration: seq = [3,5]
}

我想出了这种方法,但是EnumerateSequences(intValues,null)不会在内部递归,因此它总是返回null

private static IEnumerable<int[]> EnumerateSequences(IEnumerable<int>[] intValues,int pos,int[] seq) 
{
    if (pos < intValues.Length)
    {
        foreach (var f in intValues[pos])
        {
            if (seq == null && pos == 0)
            {
                seq = new int[intValues.Length];
            }
            seq[pos] = f;
            var _ = EnumerateSequences(intValues,pos + 1,seq);
        }
    }
    else if (pos == intValues.Length || seq == null)
    {
        yield return seq;
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)