如何解决如何递归枚举未知大小的序列
我正在尝试编写一种方法,该方法枚举可以在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 举报,一经查实,本站将立刻删除。