2010-05-21 67 views
8

我有以下代码:为什么我的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用不同的单个项目来执行多维数组?

回答

9

打电话给你的功能,像这样:

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

数组子表达式即@()什么都不做,如果内容已经是一个数组。改为使用逗号运算符,该运算符将始终创建一个包含任何后续元素的数组。请注意,您必须添加一组额外的括号,否则这样的:

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

将被视为类型的数组,而不是两个参数的一个参数。

+0

谢谢 - 这很好。我曾尝试在最后添加一个额外的逗号 - ((“one”,“two”),) - 但那不起作用。 – Jim 2010-05-21 20:34:10