PowerShell函数中返回二维数组


PowerShell在函数中返回二维数组,之所以要写这篇文章,是因为有一个小陷阱,需要一个小窍门去规避。

第一个例子:伪二维数组

function test1()
{
    $array= @(
    @(1,2,3),
    @(4,5,6),
    @(7,8,9))

    $array
}
$result = test1
$result[1]

输出:

4
5
6

这其实不是二维数组,而是一维数组嵌套而已。

第二个例子:二维数组被展开

function test2()
{
    $array = New-Object 'int[,]' 3,3
    $array[1,1]=11
    $array[2,2]=22
    $array
}
$result = test2
$result[1,1]

输出:

0
0

为什么这里没有输出11,而是输出了两个0?因为二维数组在返回时,被展开成了一维数组,这是PowerShell解释器的画蛇添足了。如何破解这画蛇添足,请看第三个例子。

第三个例子:二维数组原封不动

function test3()
{
    $array = New-Object 'int[,]' 3,3
    $array[1,1]=11
    $array[2,2]=22
    ,$array
    # 这里亦可换成@(,$array)
    # 把二维数组包装在一个只有一个元素的一维数组中
    # 即使外面的数组被展开了,内面的数组完好无损。
}
$result = test3
$result[1,1]
$result[2,2]

渴望已久的输出终于等到了:

11
22
本文链接: https://www.pstips.net/two-dimensional-array.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注