2016-10-24 9 views
5

Ich habe ein Problem bei der Konvertierung meines vorhandenen vbs-Skripts in PowerShell-Skript festgestellt. Ich habe hier mit einigen Dummy-Codes anstelle von meinem ursprünglichen Code veranschaulicht. In Beispiel 1, ich habe nur 1 Satz von Elementen im Array, nach Rückgabe der Array-Variable an die Funktion, zeigt es nur P.Mehrdimensionales Array von Funktion zurückgeben

Allerdings in Beispiel 2, wo ich 2 Satz von Elementen im Array haben, Bei Rückgabe der Array-Variable an die Funktion werden die Elemente ordnungsgemäß angezeigt.

Wenn Sie das Array innerhalb der Funktion in Beispiel 1 und 2 drucken. Es gibt kein Problem beim Abrufen der Ergebnisse.

Ich habe gegoogelt und nicht in der Lage, eine Lösung zu finden. Vielen Dank im Voraus für die freundliche Hilfe.

Beispiel 1:

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

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

Ergebnis ist "P".

Beispiel 2:

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

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

Ergebnis ist "Apple".

+4

'Rückkehr array1' $ ->' Rückkehr $ array1' oder '$ array2 = testArray' ->' $ array2 = @ (testarray) ' – PetSerAl

+0

@petseral es funktioniert, jeder Grund dafür, oder es ist nur die Syntax von Powershell? –

+3

PowerShell entrollt Arrays, die von einer Funktion zurückgegeben werden. Indem Sie das zurückgegebene Array mit dem Array-Konstruktionsoperator (',') voranstellen, wickeln Sie es in ein anderes Array ein, das bei der Rückkehr aufgerollt wird und das verschachtelte Array intakt lässt. –

Antwort

6

PowerShell entrollt Arrays, die von einer Funktion zurückgegeben werden. Stellen Sie das zurückgegebene Array mit dem comma operator (,, unärer Array-Konstruktionsoperator) vor, um es in ein anderes Array zu verpacken, das bei der Rückkehr entrollt wird und das verschachtelte Array intakt lässt.

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

    return ,$array1 
} 
+0

Was ist mit 'Write-Output - NoEnumerate $ array1'? – wOxxOm

+0

Was ist damit? Hat es irgendwelche Vorteile gegenüber 'return, $ array1' oder nur', $ array1'? –

+0

Der Vorteil liegt vermutlich darin, dass kein zusätzliches Array erstellt wird. Der Nachteil ist, dass es zu ausführlich und lange zu tippen ist. – wOxxOm

1

wenn Sie Single-Line-Array wie

$array1 = "Apple","Banana" 

erklären, wenn Sie anrufen:

$array1[0][1] 

dies geschehen wird:

enter image description here

dieser Code

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

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

exakt das gleiche dies:

$array1 = "Apple","Banana" 

aber wenn man 2 Reihe von Array deklarieren wie:

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

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

dies geschehen wird:

enter image description here

Wenn Sie in Ihrem ersten Code einen Apfel benötigen, rufen Sie einfach array [0] nicht array [0] [0] auf. Array [0] [0] gibt char für Sie zurück.

sorry für mein schlechtes Englisch Ich hoffe, Sie verstehen