2013-08-16 44 views
10

Các công trình sau đây như mong đợi:Powershell: Hai mảng chiều

$values = @(("a", "b"), ("c", "d")) 
foreach($value in $values) 
{ 
    write-host "Value 0 =" $value[0] 
    write-host "Value 1 =" $value[1] 
} 

mà kết quả (1) trong:

Value 0 = a 
Value 1 = b 
Value 0 = c 
Value 1 = d 

Nhưng nếu tôi thay đổi $ giá trị biến:

$values = @(("a", "b")) 

kết quả (2) là:

Value 0 = a 
Value 1 = 
Value 0 = b 
Value 1 = 

trong khi tôi dự kiến ​​sẽ có kết quả (3) là:

Value 0 = a 
Value 1 = b 

Thay đổi $ giá trị:

$values = @(("a"), ("b")) 

cho kết quả tương tự như kết quả (2) ở trên. Đây là những biểu diễn dữ liệu rất khác nhau.

Kịch bản mà tôi đang viết cần có khả năng xử lý mảng hai chiều trong đó thứ nguyên đầu tiên có chiều dài từ 0 đến N. Tôi muốn có thể viết tập lệnh sao cho nếu phần tử cấp đầu tiên cần được thêm vào (hoặc gỡ bỏ) mà tôi không phải thay đổi logic của tập lệnh; Tôi muốn có thể chỉnh sửa "dữ liệu". Vì vậy, câu hỏi của tôi là: Làm thế nào để tôi ghi một mảng hai chiều để hiển thị foreach vòng lặp sẽ hoạt động chính xác khi thứ nguyên đầu tiên của mảng có độ dài là 1?

get-host phản ứng với:

Name    : ConsoleHost 
Version   : 2.0 
InstanceId  : 2338657f-e474-40d8-9b95-7e2b5f6a8acf 
UI    : System.Management.Automation.Internal.Host.InternalHostUserInterface 
CurrentCulture : en-US 
CurrentUICulture : en-US 
PrivateData  : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy 
IsRunspacePushed : False 
Runspace   : System.Management.Automation.Runspaces.LocalRunspace 

Trả lời

12

Đây là một trường hợp hành vi xử lý mảng PowerShell có thể gây ra kết quả bất ngờ.

Tôi nghĩ rằng bạn sẽ cần phải sử dụng các trick dấu phẩy (các nhà điều hành mảng) để có được kết quả mong muốn:

$values = @(,("a", "b")) 
foreach($value in $values) 
{ 
    write-host "Value 0 =" $value[0] 
    write-host "Value 1 =" $value[1] 
} 

Kết quả:

Value 0 = a 
Value 1 = b 

Trên thực tế tất cả các bạn cần là:

$values = ,("a", "b") 

Bài viết này giải thích thêm về cách xử lý mảng của PowerShell:

http://blogs.msdn.com/b/powershell/archive/2007/01/23/array-literals-in-powershell.aspx

+1

Cảm ơn bạn đã liên kết. Đây là cú pháp khá kỳ quặc. Tôi sẽ giải thích ví dụ bạn đưa ra khi xác định giá trị $ [1,0] và $ values ​​[1,1]. –

Các vấn đề liên quan