如何对数组进行排序,使输出始终为数组,即使输入数组为空

  • 本文关键字:数组 排序 输出 powershell
  • 更新时间 :
  • 英文 :


我有一个包含数组的变量$try,我希望$res包含$try的排序版本。这似乎很容易,但当$try恰好包含一个数组时,我无法实现这一点。

$try包含非空数组时,没有问题:

PS C:data> $try = @("a", "c", "b")
PS C:data> $res = $try | Sort-Object
PS C:data> $res
a
b
c
PS C:data> $res.GetType()
IsPublic IsSerial Name                                     BaseType                                                                                                                                                                                                                                                 
-------- -------- ----                                     --------                                                                                                                                                                                                                                                 
True     True     Object[]                                 System.Array

然而,当输入数组为空时,输出对象是$null而不是(正如我所期望的(空数组:

PS C:data> $try = @()
PS C:data> $res = $try | Sort-Object
PS C:data> $res
PS C:data> $null -eq $res
True
PS C:data> $null -eq $try
False

我希望$res$try的排序版本,即使$try恰好包含一个空数组。在这种情况下,我希望$res是一个空数组。

除了之外,还有其他方法可以做到这一点吗

PS C:data> $try = @()
PS C:data> if ($try) {$res = $try | Sort-Object} else { $res = @() }
PS C:data> $null -eq $try
False
PS C:data> $null -eq $res
False

即使$try为$null或空数组,也可以强制$res为这样的数组:

$try = $null  # or an empty array @()
$res = @($try | Sort-Object)
# $res is now an array with 0 elements
$res.GetType()

结果

IsPublic IsSerial Name      BaseType                                                                                   
-------- -------- ----      --------                                                                                   
True     True     Object[]  System.Array

您可以初始化res变量并将结果排序附加到res:

$try = @()
$res=@()
$res += $try | Sort-Object

最新更新