微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在尝试编写一种方法,该方法枚举可以在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 举报,一经查实,本站将立刻删除。