Почему мой многомерный массив PowerShell интерпретируется как одномерный массив? - PullRequest
8 голосов
/ 21 мая 2010

У меня есть следующий код:

function HideTemplates($File, $Templates)
{
  foreach ($Template in $Templates)
  {
    Write-Host $Template[0] $Template[1] $Template[2]
  }
}

HideTemplates "test.xml" @(("one", "two", "three"))
HideTemplates "test.xml" @(("four", "five", "six"), ("seven", "eight", "nine"))

Он печатает:

o n e
t w o
t h r
four five six
seven eight nine

Я хочу напечатать:

one two three
four five six
seven eight nine

Что-то не так в моем коде? Есть ли способ заставить PowerShell по-разному использовать многомерный массив с одним элементом?

1 Ответ

9 голосов
/ 21 мая 2010

Назовите вашу функцию так:

HideTemplates "test.xml" (,("one", "two", "three"))
HideTemplates "test.xml" (,("four", "five", "six"),("seven", "eight", "nine"))

Подвыражение массива, т.е. @() ничего не делает, если содержимое уже является массивом. Вместо этого используйте оператор запятой, который всегда будет создавать массив с одним элементом вокруг того, что следует за ним. Обратите внимание, что вы должны добавить дополнительный набор паренов, иначе это:

HideTemplates "test.xml",("one", "two", "three")

Считается одним аргументом типа array вместо двух аргументов.

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