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