2011-10-20 64 views
9

我在PowerShell中遇到了一些二維數組的問題。 下面是我想要做的:Powershell:多維數組作爲函數的返回值

我創建了一個應該返回一個二維數組的函數。當調用函數時,我希望返回值是一個新的二維數組。

爲了更好地理解我添加了一個例子功能,如下:

function fillArray() { 
    $array = New-Object 'object[,]' 2,3 

    $array[0,0] = 1 
    $array[0,1] = 2 
    $array[0,2] = 3 

    $array[1,0] = 4 
    $array[1,1] = 5 
    $array[1,2] = 6 

    return $array 
} 
$erg_array = New-Object 'object[,]' 2,3 
$erg_array = fillArray 

$erg_array[0,1] # result is 1 2 
$erg_array[0,2] # result is 1 3 
$erg_array[1,0] # result is 2 1 

的結果不是我所期望的。我想以與在函數中聲明相同的方式返回信息。所以我期望$erg_array[0,1]給我2,而不是我用上面的代碼收到1,2。我怎樣才能做到這一點?

+0

你爲什麼期望'$ erg_array [0,1]#result是1 2'?它應該是'$ erg_array [0,1]#result 2',就像你所定義的那樣,這是一個項目,而不是2.所以你不清楚你想得到什麼。你正試圖找到一些不存在的東西。 –

+0

要麼修改目標,要麼修改方法我們可以嘗試使用不是2-dim數組,而是使用其他東西。 –

回答

10

爲了返回數組,正是因爲它是沒有「展開」用逗號(見help about_operators

function fillArray() { 
    $array = New-Object 'object[,]' 2, 3 

    $array[0,0] = 1 
    $array[0,1] = 2 
    $array[0,2] = 3 

    $array[1,0] = 4 
    $array[1,1] = 5 
    $array[1,2] = 6 

    , $array # 'return' is not a mistake but it is not needed 
} 

# get the array (we do not have to use New-Object now) 
$erg_array = fillArray 

$erg_array[0,1] # result is 2, correct 
$erg_array[0,2] # result is 3, correct 
$erg_array[1,0] # result is 4, correct 

,創建一個具有單個項目的數組(這是我們的陣列)。這個1項數組在返回時被展開,但只有一個級別,所以結果恰好是一個對象,即我們的數組。沒有,我們的數組本身展開,它的項目被返回,而不是數組。這種在返回時使用逗號的技術也應該與其他一些集合一起使用(如果我們想返回一個集合實例,而不是它的項目)。

3

這個港口真正缺少的是大家都在尋找的東西。如何從一個函數中獲取更多的東西。那麼我將分享每個人都想知道誰搜索過,並發現這個希望它能回答這個問題。

function My-Function([string]$IfYouWant) 
{ 
[hashtable]$Return = @{} 

$Return.Success = $False 
$Return.date = get-date 
$Return.Computer = Get-Host 

Return $Return 
} 
#End Function 

$GetItOut = My-Function 
Write-host 「The Process was $($GetItOut.Success) on the date $($GetItOut.date) on the  host  $($GetItOut.Computer)」 

#You could then do 
$var1 = $GetItOut.Success 
$Var2 =$GetItOut.date 
$Var3 = $GetItOut.Computer 

If ($var1 –like 「True」){write-host 「Its True, Its True」}