Почему мой многомерный массив PowerShell интерпретирует как 1 размерный массив?

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

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 шагать многомерный массив с единственным объектом по-другому?

8
задан Jim 21 May 2010 в 17:37
поделиться

1 ответ

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

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

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

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

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

9
ответ дан 5 December 2019 в 18:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: