从函数返回多维数组

时间:2016-10-24 14:08:09

标签: arrays powershell multidimensional-array

我在将现有的vbs脚本转换为PowerShell脚本时遇到了一些问题。我在这里用一些虚拟代码而不是原始代码来说明。在示例1中,我在数组中只有1组元素,在将数组变量返回给函数时,它只显示P。

然而在示例2中,我在数组中有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]

结果是“Apple”。

2 个答案:

答案 0 :(得分:6)

PowerShell展开从函数返回的数组。使用comma operator,,一元数组构造运算符)在返回的数组前面将它包装在另一个数组中,该数组在返回时展开,使嵌套数组保持原样。

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

    return ,$array1
}

答案 1 :(得分: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

如果你的第一个代码需要苹果,只需调用数组[0]而不是数组[0] [0]。 array [0] [0]为你返回char。

抱歉我的英语不好,希望你能理解