2011-10-20 22 views
9

Tengo algunos problemas con las matrices bidimensionales en PowerShell. Esto es lo que quiero hacer:Powershell: matriz multidimensional como valor de retorno de la función

Creo una función que se supone que devuelve una matriz bidimensional. Al invocar la función, quiero que el valor de retorno sea una nueva matriz bidimensional.

Para una mejor comprensión He añadido una función de ejemplo, a continuación:

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 

Los resultados no son lo que espero. Quiero devolver la información de la misma manera que la declarada en la función. Entonces esperaría $erg_array[0,1] para darme 2 en lugar del 1,2 que recibo con el código anterior. ¿Cómo puedo conseguir esto?

+0

¿Por qué esperan '$ erg_array [0,1] # resultado es 1 2'? Debería ser '$ erg_array [0,1] # result 2', tal como lo definió, este es un elemento, no 2. Por lo tanto, no está del todo claro qué es lo que quiere obtener. Estás tratando de obtener algo que no existe. –

+0

O el objetivo debe modificarse o los medios, p. podemos intentar usar una matriz no 2-dim pero algo más. –

Respuesta

10

Con el fin de devolver la matriz tal y como es, sin "desenrollar" utilizar el operador coma (ver 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 

El , crea una matriz con un solo elemento (que es nuestra matriz). Este conjunto de 1 elemento se desenrolla a la vuelta, pero solo un nivel, por lo que el resultado es exactamente un objeto, nuestra matriz. Sin , nuestra matriz se desenrolla, sus elementos se devuelven, no la matriz. Esta técnica con el uso de la coma en el retorno también debe usarse con algunas otras colecciones (si queremos devolver una instancia de colección, no sus elementos).

3

Lo que realmente falta en este puerto es lo que todos están buscando. Cómo sacar más de una cosa de una función Bueno, voy a compartir lo que todos quieren saber quién ha buscado y encontré esto esperando que responda la pregunta.

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