下面是一個簡單爲一套嵌套對於最高變量的值是1,2迴路,和3分別爲:嵌套for循環的抽象
for ($i = 0; $i -le 1; $i++)
{
for ($j = 0; $j -le 2; $j++)
{
for ($k = 0; $k -le 3; $k++)
{
"$i $j $k"
}
}
}
我想的抽象用於指示嵌套的任意數量for循環。因此,例如,上面會被調用,就像這樣:
NestedForLoops (1, 2, 3) { Param($i, $j, $k) "$i $j $k" }
這裏是基於this answer一種方法:
function NestedForLoopsAux([int[]]$max_indices, [int[]]$indices, [int]$index, $func)
{
if ($max_indices.Count -eq 0) { &($func) $indices }
else
{
$rest = $max_indices | Select-Object -Skip 1
for ($indices[$index] = 0; $indices[$index] -le $max_indices[0]; $indices[$index]++)
{ NestedForLoopsAux $rest $indices ($index + 1) $func }
}
}
function NestedForLoops([int[]]$max_indices, $func)
{
NestedForLoopsAux $max_indices (@(0) * $max_indices.Count) 0 $func
}
調用示例:
PS C:\> NestedForLoops (1, 2, 3) { Param([int[]]$indices); $i, $j, $k = $indices; "$i $j $k" }
0 0 0
0 0 1
0 0 2
0 0 3
0 1 0
0 1 1
0 1 2
0 1 3
0 2 0
0 2 1
0 2 2
0 2 3
1 0 0
1 0 1
1 0 2
1 0 3
1 1 0
1 1 1
1 1 2
1 1 3
1 2 0
1 2 1
1 2 2
1 2 3
有沒有更好的辦法?
元編程爲贏! :-)有趣的做法! – dharmatech