PowerShell:函数返回多维数组作为返回值

9
我在PowerShell中遇到了关于二维数组的问题。 这是我想要做的:
我创建一个函数,该函数应返回一个二维数组。当调用该函数时,我希望返回值是一个新的二维数组。
为了更好地理解,我在下面添加了一个示例函数:
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

结果不是我期望的。我希望以与函数声明相同的方式返回信息。因此,我期望$erg_array[0,1]给我2而不是上面代码中收到的1,2。我该如何实现这个?

为什么你期望 $erg_array[0,1] # result is 1 2 呢?它应该是 $erg_array[0,1] # result 2,正如你定义的一样,这是一个项目,而不是两个。因此,不太清楚你想要得到什么。你试图获取不存在的东西。 - Roman Kuzmin
目标或手段应进行修改,例如我们可以尝试使用非二维数组。 - Roman Kuzmin
2个回答

10

要想精确地返回数组本身而不进行“展开”,请使用逗号运算符(参见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
,在数组中创建一个只包含一个元素的数组对象。这个只有一个元素的数组在返回时被展开,但只展开一层,因此结果正好是一个对象,即我们的数组。如果没有,,那么我们的数组本身会被展开,其元素会被返回,而不是数组。 如果我们想返回一个集合实例而不是它的项,则应该使用这种在返回时使用逗号的技术来处理其他一些集合类型。

3
这个端口真正缺少的是每个人都在寻找的东西。如何从一个函数中获取多个值。我将分享那些搜索并希望得到答案的人想要知道的内容。
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”}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接