Powershell как обрабатывать массив переменных - PullRequest
0 голосов
/ 02 октября 2018

У меня есть следующая ситуация в powershell:

$arrayX = 0..1
$arrayY = 0..10

$array1 = @()
$array2 = @()
for ($i = 0; $i -lt $arrayY.Length; $i++){  
        $array1 += $arrayX[0] + $arrayY[$i]
        $array2 += $arrayX[1] + $arrayY[$i]
}

И $ arrayX, и $ arrayY могут иметь переменную длину.Если я увеличу $ arrayX на 1, мне нужно будет скорректировать код, чтобы учесть третье значение.как это:

$arrayX = 0..2
$arrayY = 0..10

$array1 = @()
$array2 = @()
$array3 = @()
for ($i = 0; $i -lt $arrayY.Length; $i++){  
        $array1 += $arrayX[0] + $arrayY[$i]
        $array2 += $arrayX[1] + $arrayY[$i]
        $array3 += $arrayX[2] + $arrayY[$i]
}

Какова наилучшая практика в такой ситуации, чтобы эта работа выполнялась автоматически?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Во-первых, пожалуйста, не используйте операцию += с массивами: это сильно ухудшит производительность на больших массивах.Поскольку вы заранее знаете размер массива, вы можете заранее выделить всю необходимую память:

$array1 = New-Object object[] $arrayY.Length

(вы можете использовать более конкретный тип вместо object: int или float / double будет работать)

Далее, вместо того, чтобы назначать каждый массив переменной, вы можете вместо этого создать массив массивов:

$arrayX = 0..2
$arrayY = 0..10

$resultArrays = New-Object int[][] $arrayX.Length

for ($x = 0; $x -lt $resultArrays.Length; ++$x)
{
    $resultArrays[$x] = New-Object int[] $arrayY.Length
}

for ($y = 0; $y -lt $arrayY.Length; ++$y)
{
    for ($x = 0; $x -lt $arrayX.Length; ++$x)
    {
        $resultArrays[$x][$y] = $arrayX[$x] + $arrayY[$y];
    }
}

for ($x = 0; $x -lt $resultArrays.Length; ++$x)
{
    Write-Output "array $($x): $($resultArrays[$x] -join ' ')"
}
0 голосов
/ 02 октября 2018

Это то, что вы ищете?

$arrayX = 0..2
$arrayY = 0..10

$arrayX | ForEach-Object {
    $aX = $_
    New-Variable -Name ('array' + $($aX+1)) -Value ($arrayY | ForEach-Object {$_ + $aX}) -Force
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...