2011-10-20 16 views
9

PowerShell'de iki boyutlu dizilerde bazı sorunlarım var. Yapmak istediklerim:Powershell: İşlevinin dönüş değeri olarak çok boyutlu dizi

İki boyutlu bir dizi döndürmesi beklenen bir işlev yapıyorum. Fonksiyonu çağırırken, dönüş değerinin yeni bir iki boyutlu dizi olmasını istiyorum. Aşağıda, örnek bir işlevi ekledik daha iyi anlamak için

:

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 

sonuç beklediğim gibi değil. Bilgileri, işlevde bildirildiği gibi döndürmek istiyorum. Bu yüzden yerine 2 vermek için $erg_array[0,1] beklerim. Bunu nasıl başarabilirim? virgül operatörünü kullanmak "unrolling" olmadan değişiklik yapmadan olduğu gibi dizi dönmek için

+0

Neden "$ erg_array [0,1] # sonucu 1 2" bekliyorsunuz? Tanımladığınız gibi, $ erg_array [0,1] # sonuç 2' olmalıdır. Bu, bir öğe değil, 2'dir. Böylece, ne almak istediğinizi tam olarak açık değil. Var olmayan bir şey elde etmeye çalışıyorsun. –

+0

Ya amaç düzeltilmelidir veya araçlar, ör. 2 boyutlu diziyi değil, başka bir şeyi kullanmayı deneyebiliriz. –

cevap

10

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 

, (bizim dizidir) tek bir öğe içeren bir dizi oluşturur (help about_operators bakınız). Bu 1 öğeli dizi, dönüşte açılmıyor, ancak yalnızca bir seviye, sonuç tam olarak bir nesne, bizim dizimizdir. , olmadan dizimizin kendisi açılmamış, öğeleri değil dizi döndürülür. Geri dönen virgül kullanarak bu teknik, diğer koleksiyonlarla da kullanılmalıdır (eğer koleksiyon örneğini değil, eşyalarını iade etmek istiyorsak).

3

Bu bağlantı noktasında gerçekten eksik olan şey, herkesin aradığı şey. Bir işlevden daha fazla şey nasıl alınır. Peki, herkesin kimin aradığını bilmek istediğini ve bu soruya cevap vereceğini umarak bulduğumu paylaşacağım.

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”}