Перебирая все комбинации элементов в таблице ключей - PullRequest
0 голосов
/ 28 сентября 2018

Я хочу запускать веб-запросы с разными строками запросов на основе предварительно обработанных данных.

Я могу довольно легко получить данные в формате таблицы ключей:

$ParamKeyTable = @{
    "Param1" = @(1, 8, 16)
    "Param2" = @(2, 5, 7 )
}

Затем я хотел бы зациклить все комбинации элементов, чтобы можно было выполнить «все возможные» запросы к веб-службе.

в качестве примера можно было бы использовать что-то вроде:

foreach ($Param1 in $ParamKeyTable['Param1']){
    foreach ($Param2 in $ParamKeyTable['Param2']){
        "Param1 = $('{0:00}' -f $Param1) ; Param2 = $('{0:00}' -f $Param2)"
        $UseInUrl = @{
            "Param1" = $Param1
            "Param2" = $Param2
        }
    }
}

однако количество параметров, а также их имена могут время от времени меняться, в конце мне нужен только объект $UseInUrl, поэтому любой формат получения перестановок и преобразования их в формат $UseInUrl будетработать для меня.

Я пытался использовать цикл for с вычисленным окончательным числом перестановок, а затем с помощью модуля определить, какое значение использовать с какого ключа, но не смог получитьэто сработало вообще, я также пытался зацикливаться на клавишах с отдельными счетчиками, но не нашел способа сделать это настолько масштабируемым, как хотелось бы.

самое близкое, что я получил, этонемногочто-то вроде этого, но я не смог найти разумного способа обработки приращения только первого счетчика ключа.

$ParamKeyTable = [ordered]@{
    "Param1" = @(1, 8, 16)
    "Param2" = @(2, 5, 7 )
}

$Counter = [ordered]@{}
foreach ($Key in $ParamKeyTable.Keys){
    $Counter[$Key] = 0
}

do {
    $UseInUrl = @(foreach ($Key in $ParamKeyTable.Keys){
        if ($Counter[$Key] -le $ParamKeyTable[$Key].Count){
            $Counter[$Key]++
        }

        #logic that actually makes this work goes here

        [PSCustomObject]@{
            $Key = $ParamKeyTable[$Key][$Counter[$Key]]
        }
    })
} while ($UseInUrl -ne $null)

любая помощь или совет будет высоко ценится.

1 Ответ

0 голосов
/ 28 сентября 2018

Все еще немного неясно, что вы ищете, этот скрипт:

## Q:\Test\2018\09\28\SO_52557811.ps1

$ParamKeyTable = @{
     "Param1" = @(1, 8, 16)
     "Param2" = @(2, 5, 7 )
 }

$UseInUrl = foreach ($Param1 in $ParamKeyTable['Param1']){
    foreach ($Param2 in $ParamKeyTable['Param2']){
         [PSCustomObject]@{
            "Param1" = $Param1
            "Param2" = $Param2
        }
    }
}
$UseInUrl

Будет иметь этот вывод со всеми итерациями:

> Q:\Test\2018\09\28\SO_52557811.ps1

Param1 Param2
------ ------
     1      2
     1      5
     1      7
     8      2
     8      5
     8      7
    16      2
    16      5
    16      7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...