2010-05-21 39 views
8

Tôi có đoạn mã sau:Tại sao mảng đa chiều PowerShell của tôi được hiểu là mảng 1 chiều?

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")) 

It in:

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

Tôi muốn nó in:

one two three 
four five six 
seven eight nine 

Tôi có làm điều gì đó sai trái trong mã của tôi? Có cách nào để ép PowerShell chạy một mảng đa chiều với một mục duy nhất khác nhau không?

Trả lời

9

Gọi chức năng của bạn như sau:

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

Một mảng subexpression tức @() làm gì nếu những nội dung đã là một mảng. Sử dụng toán tử dấu phẩy thay vào đó sẽ luôn tạo một mảng với một phần tử xung quanh bất kỳ phần tử nào theo sau nó. Lưu ý rằng bạn phải thêm một nhóm parens khác theo cách khác:

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

Sẽ được coi là một đối số duy nhất của mảng loại thay vì hai đối số.

+0

Cảm ơn - điều đó đã hiệu quả. Tôi đã thử thêm một dấu phẩy thêm vào cuối - (("một", "hai"),) - nhưng điều đó đã không hoạt động. – Jim