2016-10-24 215 views
5

我在將現有的vbs腳本轉換爲PowerShell腳本時遇到了一些問題。我在這裏用一些虛擬代碼而不是我原來的代碼來說明。在示例1中,我只有一組元素在數組中,在將數組變量返回給函數時,它將只顯示P.從函數返回多維數組

但是在示例2中,在數組中有兩組元素的情況下,在將數組變量返回給函數時,它將正確顯示元素。

如果您在示例1和2中的函數中打印數組。獲取結果沒有任何問題。

我已經使用Google並且無法找到任何解決方案。非常感謝您的幫助。

實施例1:

function testArray { 
    $array1 = @() 
    $array1 += ,@("Apple","Banana") 

    return $array1 
} 
$array2 = testArray 
Write-Host $array2[0][1] 

結果爲 「P」。

實施例2:

function testArray { 
    $array1 = @() 
    $array1 += ,@("Apple","Banana") 
    $array1 += ,@("Orange","Pineapple") 

    return $array1 
} 
$array2 = testArray 
Write-Host $array2[0][0] 

結果爲 「蘋果」。

+4

'返回$ array1' - >'回報,$ array1'或'$數組2 = testArray' - >'$數組2 = @(testArray)' – PetSerAl

+0

@petseral它的工作原理,或者它只是PowerShell的語法? –

+3

PowerShell展開函數返回的數組。通過將數組構造運算符(',')前置到返回數組中,將其包裝在另一個數組中,該數組在返回時展開,從而使嵌套數組保持原樣。 –

回答

6

PowerShell展開函數返回的數組。將返回的數組與comma operator,,一元數組構造運算符)一起包裝到另一個數組中,該數組在返回時展開,使嵌套數組完好無損。

function testArray { 
    $array1 = @() 
    $array1 += ,@("Apple","Banana") 

    return ,$array1 
} 
+0

'Write-Output -NoEnumerate $ array1'怎麼樣? – wOxxOm

+0

怎麼樣?它比'return,$ array1'還是''array1''有什麼優勢? –

+0

推測其優點是它不會創建額外的數組。缺點是輸入太冗長而且太長。 – wOxxOm

1

在聲明像

$array1 = "Apple","Banana" 

單行排列,當你撥打:

$array1[0][1] 

會出現這種情況:

enter image description here

驗證碼

function testArray { 
    $array1 = @() 
    $array1 += ,@("Apple","Banana") 

    return $array1 
} 
$array2 = testArray 
Write-Host $array2[0][1] 

精確相同的是:

$array1 = "Apple","Banana" 

,但在聲明數組的第2行,如:

function testArray { 
    $array1 = @() 
    $array1 += ,@("Apple","Banana") 
    $array1 += ,@("Orange","Pineapple") 

    return $array1 
} 
$array2 = testArray 
Write-Host $array2[0][0] 

會出現這種情況:

enter image description here

如果你需要蘋果在你的第一個代碼只是調用array [0]而不是array [0] [0]。數組[0] [0]爲你返回字符。

對不起我的英文不好,我希望你明白