Проблема многомерного массива PowerShell - PullRequest
1 голос
/ 09 апреля 2020

Я создаю многомерный массив

cls
$b=[Collections.ArrayList]::new()
$a=4,5,6
[void]$b.Add($a)
$a1=7,8,9
[void]$b.Add($a1)

"Value is: "+$b[0][1]+" ."
"Size  is: "+$b.Count+" ."
""###
function arr(){
    $b=[Collections.ArrayList]::new()
    $a=4,5,6
    [void]$b.Add($a)
    $a1=7,8,9
    [void]$b.Add($a1)
    return $b
}
$c=arr
"Value is: "+$c[0][1]+" ."
"Size  is: "+$c.Count+" ."

Вывод:

Value is: 5 .
Size  is: 2 .

Value is: 5 .
Size  is: 2 .

Теперь все правильно. Функция возвращает массив в исходное состояние, без каких-либо деформаций. Но я не могу знать заранее размер массива, и когда размер массива равен 1 , я получаю следующую проблему:

cls
$b=[Collections.ArrayList]::new()
$a=4,5,6
[void]$b.Add($a)

"Value is: "+$b[0][1]+" ."
"Size  is: "+$b.Count+" ."
""###
function arr(){
    $b=[Collections.ArrayList]::new()
    $a=4,5,6
    [void]$b.Add($a)
    return $b
}
$c=arr
"Value is: "+$c[0][1]+" ."
"Size  is: "+$c.Count+" ."

Вывод:

Value is: 5 .
Size  is: 1 .

Value is:  .
Size  is: 3 .

Когда массив перемещается вне функции он превращается из многомерного в одномерный, и в выводе нет моей ценности. Как я могу избежать этой ошибки?

1 Ответ

1 голос
/ 09 апреля 2020

Строка возврата в вашем коде должна выглядеть так:

return (, $b)

Это заставляет PowerShell сразу же возвращать ваш объект. По умолчанию он возвращает каждый элемент отдельно.

Подробнее об этом см. В документации: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_return?view=powershell-7 Поиск выражения унарного массива

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...