Powershell:多维数组作为函数的返回值

时间:2011-10-20 08:49:46

标签: powershell multidimensional-array return-value

我在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上面的代码。我怎样才能做到这一点?

2 个答案:

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

,创建一个包含单个项目的数组(这是我们的数组)。这个1项数组在返回时展开,但只有一个级别,因此结果恰好是一个对象,我们的数组。如果没有,我们的数组本身被展开,则会返回其项目,而不是数组。返回时使用逗号的这种技术也应该与其他一些集合一起使用(如果我们想要返回一个集合实例,而不是它的项目。)

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