Я застрял, пытаясь завершить алгоритм декартового произведения в Powershell. Используя части других формул, найденных здесь в stackoverflow, я пришел к следующему:
clear
Function New-GenericDictionary([type] $keyType, [type]$valueType)
{
$base = [System.Collections.Generic.Dictionary``2]
$ct = $base.MakeGenericType(($keyType, $valueType))
New-Object $ct
}
$sets = New-GenericDictionary int string
$sets[0] = "1"
$sets[1] = "0,1"
$sets[2] = "0,1"
$iterations = 1
$stringCombo = ""
foreach($key in $sets.Keys) {
$pieces = $sets[$key].Split(",")
$iterations = $iterations * $pieces.Length
}
for ($i = 0; $i -lt $iterations; $i++) {
$stringCombo = ""
foreach($key in $sets.Keys) {
$pieces = $sets[$key].Split(",")
$val = $pieces.Length
$get = $i%$val
$stringCombo = $stringCombo + " " + $pieces[$get]
}
Write-Host $stringCombo.Trim()
}
#output hoped for:
#1 0 0
#1 0 1
#1 1 0
#1 1 1
#output is:
#1 0 0
#1 1 1
#1 0 0
#1 1 1
Как видно в комментариях внизу фрагмента кода, вывод не совсем дает желаемые результаты. Счетчик итераций возвращает правильное значение, но комбинации не завершаются правильно.
В этом фрагменте $ sets [x] исправлено, но в реальном скрипте $ словарь устанавливает наборы элементов как часть цикла и может содержать от 1 до многих элементов за итерацию.
Может кто-нибудь предложить второй набор глаз, чтобы показать мне, что я пропустил?
Спасибо