我在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
。我怎样才能做到这一点呢?
为了准确地返回数组而不"展开",使用逗号操作符(参见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项的数组在返回时展开,但只展开一层,因此结果恰好是一个对象,即我们的数组。如果没有,
,则展开数组本身,返回数组的项,而不是数组本身。这种在返回时使用逗号的技术也应该用于其他集合(如果我们想返回一个集合实例,而不是它的项)。
这个移植中真正缺失的是每个人都在寻找的东西。如何从一个函数中得到不止一个东西。好吧,我将分享每个人都想知道的东西,谁已经搜索并发现了这个希望它能回答这个问题。
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”}