2013-08-16 22 views
10

aşağıdaki çalışır:Powershell: İki boyutlu diziler beklendiği gibi

$values = @(("a", "b")) 
: Ben değiştirirseniz

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

Ama $ değişkeni değerleri: Sonuçlar (1) 'de

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

sonuç (2) 'nin:

Value 0 = a 
Value 1 = 
Value 0 = b 
Value 1 = 
için $ değerinin değiştirilmesi

Value 0 = a 
Value 1 = b 

: sonucun (3) olması beklenmektedir olurdu ise

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

(2) Yukarıdaki sonuç olarak aynı sonucu vermektedir. Bunlar çok farklı veri sunumları.

Yazmakta olduğum komut dosyasının, ilk boyutun 0'dan N'ye kadar uzunluğa sahip olduğu iki boyutlu dizileri ele alabilmesi gerekiyor. Komut dosyasını yazabilmeyi isterim, böylece birinci düzey bir öğe gerekiyorsa Komut dosyasının mantığını değiştirmek zorunda olmadığım (veya kaldırılmış) Sadece "verileri" düzenleyebilmeyi isterdim.

Bu yüzden sorum şu: İki boyutlu bir diziyi, foreach döngüsünde, dizinin ilk boyutu 1 uzunluğa sahip olduğunda düzgün şekilde çalışacak şekilde nasıl işaretlerim?

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 

cevap

12

Bu PowerShell en dizi işleme davranışı beklenmedik sonuçlara neden olabilir başka bir durumdur:

olsun konak ile cevap verir.

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

Sonuç:

Value 0 = a 
Value 1 = b 

Aslında tek ihtiyacınız şudur:

Sana istenilen sonucu elde etmek için virgül trick (dizi operatörü) kullanmanız gerekir düşünüyorum

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

Bu makalede, PowerShell'in dizileri işlemesi hakkında daha fazla bilgi verilmektedir:

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

+1

Bağlantı için teşekkür ederiz. Bu oldukça garip bir sözdizimi. Verdiğiniz örneği $ değerleri [1,0] ve $ değerleri [1,1] tanımlamak olarak yorumluyorum. –