2016-10-24 173 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]为你返回字符。

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