如果我在PowerShell中有一个只有一个条目的多数组,并且我将对该数组进行排序,它会将行数从1更改为3。但如果我在该多数组中有多个条目,则在排序后它将保持相同的行数。
PS C:\Users\user> $a = ,("2", "A", "Urs")
PS C:\Users\user> $a
2
A
Urs
PS C:\Users\user> $a.Count
1
PS C:\Users\user> $a = $a | Sort-Object
PS C:\Users\user> $a
2
A
Urs
PS C:\Users\user> $a.Count
3
PS C:\Users\user> $a = ,("2", "A", "Urs")
PS C:\Users\user> $a.Count
1
PS C:\Users\user> $a += ,("3", "B", "Max")
PS C:\Users\user> $a
2
A
Urs
3
B
Max
PS C:\Users\user> $a.Count
2
PS C:\Users\user> $a = $a | Sort-Object
PS C:\Users\user> $a.Count
2发布于 2017-01-11 16:37:48
言之有礼
$a = ,("2", "A", "Urs")
$a.Count上面的$a是只有一个元素的多数组,所以计数为1
在$a下面是包含三个元素的数组
$a = $a | Sort-Object
$a.Count发布于 2017-01-11 16:57:07
对不起,我没有足够的名气来添加评论而不是回答。
你所有的问题都是因为管道而发生的。管道从流中收集结果。从流中,您无法判断管道返回的是单例还是集合。因此,只有一个元素的二维数组就变成了一维。
发布于 2017-01-11 19:36:16
我做了一个很糟糕的变通方法,但它是有效的。
$newarray = New-Object System.Collections.ArrayList
$newmultiarray = New-Object System.Collections.ArrayList
$a = ,("test", "3333", "peter", "peter2")
$a += ,("rrrr", "8888", "max", "rhzzh")
$stringlist = $a | Sort-Object @{Expression={$_[0]}; Ascending=$True} | %{ "$($_[0]),$($_[1]),$($_[2]),$($_[3])" }
$arraymulti =$stringlist -split "[\r\n]"
foreach ($i in $arraymulti){
$array = $i -split ","
foreach ($y in $array){
[void]$newarray.Add($y)
}
[void]$newmultiarray.Add($newarray)
$newarray = New-Object System.Collections.ArrayList
}
$newmultiarrayhttps://stackoverflow.com/questions/41585856
复制相似问题