我有一个带有 i 个项目的 IEnumerable,我需要遍历并测试另一个带有 j 个项目的 IEnumerable。但是,i 应该随机迭代,并且在 j 的每次迭代中,可能会测试与 i 不同的项目:
list_of_is = [ a, b, c, d, e, f, g ]
list_of_js = [ x, y, z ]
让我们假设随机化 i 是微不足道的,所以我们可以很容易地生成这样的东西:
random_is[x] = [ e, b, f, g, d, a, c ]
random_is[y] = [ f, b, g, c, a, d, e ]
random_is[z] = [ d, g, f, c, b, e, a ]
现在我们需要的基本上是:
for (int i = 0; i < list_of_is.Count(); i++)
{
foreach (var j in list_of_js)
{
yield return j.DoSomething(random_is[j][i]);
}
}
输出将是:
e x , f y , d z , b x , b y , g z , ...
现在,有没有办法在不存储random_is
变量的情况下做到这一点?这两个列表都非常大,这会消耗大量内存。
编辑: 澄清一下,顺序很重要。j 的每次传递都应该只“处理”它的 random_i 中的下一个项目。总体而言,应按以下顺序完成处理: